我有一张这样的桌子
ID | 期间 月份 | 01 | 02 | 员工守则 |
---|---|---|---|---|
1 | 202401 | 钾 | 大号 | 005678 |
2 | 202401 | S1 | 米 | 005679 |
月份以 yyyymm 为单位,01 02 代表日期。
我想让格式像这样
预期结果:
员工守则 | 期间 月份 | 日期 | 价值 |
---|---|---|---|
005678 | 202401 | 2024-01-01 | 钾 |
005678 | 202401 | 2024-01-02 | 大号 |
005679 | 202401 | 2024-01-01 | S1 |
005679 | 202401 | 2024-01-02 | 米 |
使用此查询
SELECT
[Employee Code],
[Period Month],
-- Menyusun tanggal berdasarkan kolom tanggal (01, 02, ..., 31) sesuai dengan 'Period Month'
CASE
WHEN [Date] = '01' AND TRY_CAST(CAST([Period Month] AS CHAR(4)) + '-01' AS DATE) IS NOT NULL THEN CAST(CAST([Period Month] AS CHAR(4)) + '-01' AS DATE)
WHEN [Date] = '02' AND TRY_CAST(CAST([Period Month] AS CHAR(4)) + '-02' AS DATE) IS NOT NULL THEN CAST(CAST([Period Month] AS CHAR(4)) + '-02' AS DATE)
END AS [Date],
[Value]
FROM
(SELECT [Employee Code], [Period Month],
[01], [02]
FROM CTE1) AS SourceTable
UNPIVOT
([Value] FOR [Date] IN
([01], [02])) AS UnpivotedTable
ORDER BY [Employee Code], [Period Month], [Date];
但它返回的内容如下:
员工守则 | 期间 月份 | 日期 | 价值 |
---|---|---|---|
005678 | 202401 | 无效的 | 钾 |
005678 | 202401 | 无效的 | 大号 |
005679 | 202401 | 无效的 | S1 |
005679 | 202401 | 无效的 | 米 |
您当前正在尝试将其转换
2024-01
为日期 - 但这不是有效日期。您需要保留所有[Period Month]
并删除-
(因为否则您拥有的202401-01
也是无效的),然后将其转换20240101
为有效日期。然后您可以CASE
通过直接插入[Date]
列来删除,例如如果您一点一点地构建您想要的结果,那么很容易发现它在什么时候没有按照您期望的方式工作。