转置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都对语法了如指掌。我不是说这是最好的,但它不应该被打折,因为它并不复杂。恰恰相反。