转置Microsoft SQL Server表
我有两个表,一个标题表和一个细节表。数据如下所示:转置Microsoft SQL Server表,sql,sql-server,tsql,pivot,Sql,Sql Server,Tsql,Pivot,我有两个表,一个标题表和一个细节表。数据如下所示: OBJ_NO | Name 12345 | Fred 67891 | Bob OBJ_NO | Name | Red | Blue | Green 12345 | Fred | 1 | 1 | 1 67891 | Bob | 1 | 0 | 1 明细表: 基本上,我想要看到的是这样的东西: OBJ_NO | Name 12345 | Fred
OBJ_NO | Name
12345 | Fred
67891 | Bob
OBJ_NO | Name | Red | Blue | Green
12345 | Fred | 1 | 1 | 1
67891 | Bob | 1 | 0 | 1
明细表:
基本上,我想要看到的是这样的东西:
OBJ_NO | Name
12345 | Fred
67891 | Bob
OBJ_NO | Name | Red | Blue | Green
12345 | Fred | 1 | 1 | 1
67891 | Bob | 1 | 0 | 1
它也可以是不同数量的颜色。还没定下来。并不是每个标题参考都有一种以上示例中所示的颜色
我将如何实现这一点?SQL Server PIVOT将适合您
WITH CTE(OBJ_NO, NAME, RED, BLUE, GREEN)
AS
(
SELECT [OBJ_NO]
,[NAME]
,[red],[blue],[green]
FROM (SELECT T2.[OBJ_NO]
,T2.[NAME], T1.CODE FROM [dbo].[Table_2] T2
INNER JOIN [dbo].[Table_1] T1 ON T1.HEADER_OBJ_NO = T2.OBJ_NO ) AS SourceTable
PIVOT
(MAX(CODE)
FOR CODE IN ([red], [blue], [green])
)AS PivotTable
)
SELECT OBJ_NO
,NAME
,RED = CASE WHEN RED = 'red' THEN 1 ELSE 0 END
,BLUE = CASE WHEN BLUE = 'blue' THEN 1 ELSE 0 END
,GREEN = CASE WHEN GREEN = 'green' THEN 1 ELSE 0 END
FROM CTE
这个问题以前有人问过,但这里有一个sql,其中包含一些对您的问题有帮助的代码-这太棒了,谢谢蓝脚。这是一个重复的问题吗?数据不包含所需结果的1和0。并且只有一列是旋转的。不是所有的行和列。我不这么认为,但你们是“专家”:你们可以使用任意数量的行和列作为dup,包括否决票是怎么回事?嗯,这不是一个骗人的问题。另一个是关于转置所有行和列。这是相似但不同的。dupe中的pivot解决方案首先取消pivot,然后进行pivot。我的不是这样的。这也是最简单的回答。虽然FOR XML的东西很管用,但我不确定是否所有DBA都对语法了如指掌。我不是说这是最好的,但它不应该被打折,因为它并不复杂。恰恰相反。