2016-04-12 31 views
0

を与える:SQLクエリは、私は次の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 

これは次の結果を返します。

enter image description here

を今、私はどのピボット部に別の列を追加しますまた、cvテーブルからも得られます。このテーブルの構造は奇妙なものです。それには、id、form、group、およびdataという列があります。

id、form、groupという列は、実際には異なるアプリケーションで使用される一意のIDです。

追加したい列には、id = RECHTSVORM、グループとフォームが空のcvテーブルのデータが含まれています。

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 

しかし、これは次のエラー得られます:

私はこれを試してみましたとクエリは次のようである

Conversion failed when converting date and/or time from character string.

私はRECHTSVORM列のためにそれもあるので、これは推測しているがcv.dataをdatetimeに変換しようとしています。 クエリがcv.dataをDATUM_AVA列のdatetimeに変換するだけでは、何を変更する必要がありますか?

答えて

0

'DATUM_AVA'行のData値のいずれかが112スタイルDATETIMEの正しい形式でない可能性があります。この場合'yyyymmdd'。 MSDNのCAST and CONVERTを参照してください。同じ述部でcv表から選択して値をチェックすることでチェックできます。

作成する列に関係なく、dataCVは、複数のデータ型にすることはできません。 DATETIMEの値と値を元の列データ型と共にdataCV列に挿入しようとしている可能性があります。 DATETIME値であることがわかっている場合は、ピボットに追加の列を追加して、潜在的なデータ型を識別してください。後で変換することができます。

+0

追加の列をピボットに追加するという意味はありますか? そのクエリはどのように見えますか? – Marijn

関連する問題