gpt4 book ai didi

SQL Server,如何以 "rotated"格式加入表(返回列而不是行)?

转载 作者:行者123 更新时间:2023-12-04 06:53:51 26 4
gpt4 key购买 nike

对不起,标题蹩脚,我今天的描述能力很差。

简而言之,我有一个类似于以下内容的查询:

SELECT P.LAST_NAME, P.FIRST_NAME, D.DEMO_GROUP
FROM PERSON P
JOIN PERSON_DEMOGRAPHIC PD ON PD.PERSON_ID = P.PERSON_ID
JOIN DEMOGRAPHIC D ON D.DEMOGRAPHIC_ID = PD.DEMOGRAPHIC_ID

这将返回如下输出:
LAST_NAME      FIRST_NAME     DEMO_GROUP
---------------------------------------------
Johnson Bob Male
Smith Jane Female
Smith Jane Teacher
Beeblebrox Zaphod Male
Beeblebrox Zaphod Alien
Beeblebrox Zaphid Politician

我希望输出类似于以下内容:
LAST_NAME      FIRST_NAME     Male           Female         Teacher        Alien          Politician
---------------------------------------------------------------------------------------------------------
Johnson Bob 1 0 0 0 0
Smith Jane 0 1 1 0 0
Beeblebrox Zaphod 1 0 0 1 1

DEMOGRAPHIC 表中的行数各不相同,所以我不能肯定地说我需要多少列。查询需要灵活。

是的,在代码中执行此操作是微不足道的。但是这个查询是一组复杂的存储过程、 View 和报告服务中的一个,其中许多不在我的影响范围内。我需要在数据库中生成此输出以避免破坏系统。有任何想法吗?

顺便说一下,这是 MS SQL Server 2005。

谢谢。

最佳答案

您可以使用 PIVOT 函数。这是一段代码。这个函数需要提前列,但是如果你不知道列数,你应该做一个动态的sql查询。看看 this 的答案。

SELECT LAST_NAME, FIRST_NAME, [Male], [Female], [Alien], [Politician], [Teacher]
FROM
(SELECT LAST_NAME, FIRST_NAME, DEMO_GROUP
FROM Person) p
PIVOT
(
COUNT (DEMO_GROUP)
FOR DEMO_GROUP IN
( [Male], [Female], [Alien], [Politician], [Teacher] )
) AS pvt
ORDER BY LAST_NAME

关于SQL Server,如何以 "rotated"格式加入表(返回列而不是行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com