简体   繁体   English

SQL Server-在3列表上透视两列

[英]SQL Server - Pivot two columns on a 3 column table

i'm a bit stuck with SQL pivot, I have a 3 column table like this: 我对SQL枢轴有些困惑,我有一个3列的表格,如下所示:

Name  Color  Date
TOM   BLUE   10-10-2018
MAT   RED    10-10-2018
TOM   BLUE   11-11-2018

And I want an output like this: 我想要这样的输出:

     10-10-2018  11-11-2018
 TOM  BLUE        BLUE
 MAT  RED         

Could anyone help me please? 有人可以帮我吗?

Based on the question How to pivot dynamically with date as column with some tweeks for your case: 基于以下问题: 如何根据日期将 t 列作为日期进行动态调整:

DECLARE @cols NVARCHAR (MAX);
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 121) + ']', 
               '[' + CONVERT(NVARCHAR, [DATE], 121) + ']')
               FROM    (SELECT DISTINCT [DATE] FROM tablename) PV  
               ORDER BY [DATE]

DECLARE @query NVARCHAR(MAX)
SET @query = '           
              SELECT * FROM 
             (
                 SELECT * FROM tablename
             ) x
             PIVOT 
             (
                 MIN(Color)
                 FOR [DATE] IN (' + @cols + ')
            ) p      

            '     
EXEC SP_EXECUTESQL @query;

You could do this : 您可以这样做:

SELECT *
FROM temp
PIVOT(
 MAX(Color)
  FOR [Date] IN ([10-10-2018], [11-11-2018])  
) PIV
ORDER BY Name DESC

SQLFiddle SQLFiddle

IF you want to change NULL fields to empty, just use ISNULL(ColName, '') 如果要将NULL字段更改为空,只需使用ISNULL(ColName, '')

LIKE THIS 像这样

SELECT PIV.Name, ISNULL(PIV.[10-10-2018],''), ISNULL(PIV.[11-11-2018],'')
FROM temp
PIVOT(
 MAX(Color)
  FOR [Date] IN ([10-10-2018], [11-11-2018])  
) PIV
ORDER BY Name DESC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM