我有以下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,表单和组实际上是某种在不同应用程序中使用的唯一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列的日期时间,我需要更改什么?
答案 0 :(得分:0)
Data
行中的'DATUM_AVA'
值之一可能与112
样式DATETIME
的格式不正确。在这种情况下'yyyymmdd'
。请参阅MSDN中的CAST and CONVERT。您可以通过从cv
表中选择具有相同谓词并检查值来进行检查。
无论上述哪个列,您创建的列dataCV
都不能超过一种数据类型。您可能尝试将原始列数据类型的DATETIME
值和值插入到创建的dataCV
列中。如果您需要知道它是DATETIME
值,请向数据透视表添加其他列以帮助您识别潜在的数据类型。然后你可以转换。