【发布时间】:2016-04-13 00:09:17
【问题描述】:
我有以下 SQL 查询:
SELECT *
FROM (
SELECT ClientNumber, ClientName, YearEndDate, schedule, a1, ad1, a2, ad2, a3, ad3,
cv.[id] as CvId,
[dataCV] =
CASE cv.[id]
WHEN 'DATUM_AVA' THEN CONVERT(DATETIME, cv.[data], 112)
WHEN 'RECHTSVORM' THEN cv.[data]
END,
DATEADD(day, 30, [data]) AS Stat_Filing_Date,
To_Be_Filed =
CASE
WHEN DATEADD(day, 30, [data]) < GETDATE() THEN 'Yes'
ELSE 'No'
END
FROM EngagementFiles ef
INNER JOIN ac
ON ef.id = ac.EngagementFile_Id
INNER JOIN cv
ON ef.id = cv.EngagementFile_Id
RIGHT JOIN sh
ON ac.short_name = sh.a3 OR ac.short_name = sh.a2 OR ac.short_name = sh.a1
WHERE (schedule = 'G21-9A' OR schedule = 'G21-9B') AND sh.EngagementFile_Id = ef.id AND (ac.act_type = 'C' OR ac.act_type = 'H')
AND schedule =
CASE WHEN
(
SELECT cv.[data]
FROM cv
WHERE [id] = 'REPORT_TYPE' AND cv.EngagementFile_Id = ef.id
) LIKE '%VKT%' THEN 'G21-9B' ELSE 'G21-9A' END
AND ((cv.[id] = 'DATUM_AVA' AND cv.[form] = '' AND cv.[group] = ''))
) AS s
PIVOT (
MAX(dataCV)
FOR [CvId] IN ([DATUM_AVA]
)
)AS pvt
这将返回以下结果:
现在我想在也来自 cv 表的数据透视部分添加另一列。这张表的结构有点奇怪。它有以下列:id、form、group和data。
id、form 和 group 列实际上是在不同的应用程序中使用的某种唯一 id。
我要添加的列包含 cv 表中的数据,其中 id = RECHTSVORM 并且 group 和 form 为空。
我尝试过的查询如下:
SELECT *
FROM (
SELECT ClientNumber, ClientName, YearEndDate, schedule, a1, ad1, a2, ad2, a3, ad3,
cv.[id] as CvId,
[dataCV] =
CASE cv.[id]
WHEN 'DATUM_AVA' THEN CONVERT(DATETIME, cv.[data], 112)
WHEN 'RECHTSVORM' THEN cv.[data]
END,
DATEADD(day, 30, [data]) AS Stat_Filing_Date,
To_Be_Filed =
CASE
WHEN DATEADD(day, 30, [data]) < GETDATE() THEN 'Yes'
ELSE 'No'
END
FROM EngagementFiles ef
INNER JOIN ac
ON ef.id = ac.EngagementFile_Id
INNER JOIN cv
ON ef.id = cv.EngagementFile_Id
RIGHT JOIN sh
ON ac.short_name = sh.a3 OR ac.short_name = sh.a2 OR ac.short_name = sh.a1
WHERE (schedule = 'G21-9A' OR schedule = 'G21-9B') AND sh.EngagementFile_Id = ef.id AND (ac.act_type = 'C' OR ac.act_type = 'H')
AND schedule =
CASE WHEN
(
SELECT cv.[data]
FROM cv
WHERE [id] = 'REPORT_TYPE' AND cv.EngagementFile_Id = ef.id
) LIKE '%VKT%' THEN 'G21-9B' ELSE 'G21-9A' END
AND ((cv.[id] = 'DATUM_AVA' AND cv.[form] = '' AND cv.[group] = '')
OR (cv.[id] = 'RECHTSVORM' AND cv.[form] = '' AND cv.[group] = ''))
) AS s
PIVOT (
MAX(dataCV)
FOR [CvId] IN ([DATUM_AVA],
[RECHTSVORM]
)
)AS pvt
但这会产生以下错误:
从字符转换日期和/或时间时转换失败 字符串。
我猜这是因为对于 RECHTSVORM 列,它也在尝试将 cv.data 转换为日期时间。 为了让查询仅将 cv.data 转换为 DATUM_AVA 列的日期时间,我需要进行哪些更改?
【问题讨论】:
标签: sql sql-server pivot