2

我的表包含六列,例如 ID、QC_ID、Employee_ID、Created_Date、Created_By 我的源表看起来像

ID|QC_ID|Employee_ID|Status|Created_Date|Created_By
__|_____|___________|______|____________|___________
 1| 1   |   1001    |  P   | 30-08-2019 |  101
 2| 1   |   1002    |  A   | 30-09-2019 |  101
 3| 1   |   1003    |  P   | 30-10 -2019|  101
 4| 1   |   1001    |  A   | 30-10-2019 |  101 
 5| 1   |   1002    |  P   | 30-08-2019 |  101
 6| 1   |   1002    |  A   | 30-10-2019 |  101
 7| 1   |   1003    |  A   | 30-08-2019 |  101
 8| 1   |   1003    |  A   | 30-09-2019 |  101
 9| 1   |   1001    |  A   | 30-09-2019 |  101


and my pivote table should be look like:

ID|QC_ID|Employee_ID|30-08-2019|30-09-2019|30-10-2019
__|_____|___________|__________|__________|___________
 1| 1   |   1001    |   P      |   A      |  A
 2| 1   |   1002    |   P      |   A      |  A
 3| 1   |   1003    |   A      |   A      |  P
4

2 回答 2

2

假设你想要一个动态枢轴

例子

Declare @SQL varchar(max) = '
Select *
 From  (
        Select ID  = min(ID) over (partition by Employee_ID)
              ,QC_ID
              ,Employee_ID
              ,Status
              ,Created_Date = convert(date,Created_Date)
          From YourTable
       ) A
 Pivot (max([Status]) For [Created_Date] in (' + Stuff((Select Distinct ','+QuoteName(convert(date,Created_Date)) 
                                                          From YourTable A  
                                                          Order By 1 
                                                          For XML Path('')),1,1,'')  + ') ) p'
--Print @SQL
Exec(@SQL)

退货

ID  QC_ID   Employee_ID 2019-08-30  2019-09-30  2019-10-30
1   1       1001        P           A           A
2   1       1002        P           A           A
3   1       1003        A           A           P
于 2019-10-01T14:05:28.007 回答
1

您可以使用条件聚合

此解决方案要求您提前知道所有可能的日期值(如果您不知道,则需要使用动态 SQL,这是一种更复杂的技术)。

SELECT
    id,
    qc_id,
    employee_id,
    MAX(CASE WHEN created_date = CAST('2019-08-30' AS DATE) THEN Status END) AS [30-08-2019],
    MAX(CASE WHEN created_date = CAST('2019-09-30' AS DATE) THEN Status END) AS [30-09-2019],
    MAX(CASE WHEN created_date = CAST('2019-10-30' AS DATE) THEN Status END) AS [30-10-2019]
FROM mytable
GROUP BY 
    id,
    qc_id,
    employee_id
于 2019-10-01T13:52:35.210 回答