2017-05-19 11 views
0

以下のクエリは正常に動作していますが、静的なピボットがあります。私はそれを動的に作成したい。私は、このコードが動的なピボットにするために必要な変更が何であるか知りたいと思っていました。 ありがとうございます!!!!SQLサーバーで動的ピボットを作成する必要があります

select * from 
    (
select g.NationalityName_1,DepartmentName_1,h.EmployeeID from HR_Department hr 
      join 
HR_EmploymentInformation h 
    on h.DepartmentID=hr.DepartmentID 
     join 
HR_EmployeeDetail e 
    on e.EmployeeID=h.EmployeeID 
     join 
GEN_Nationality g 
    on g.NationalityID=e.DefaultNationalityID 
) as fev 
pivot 
(
    count(employeeId) 
    for departmentname_1 in (Administration,Academia,[New Department 1],[New Department 2],[New Department 3],[New Department 5]) 
) as pvt 

これが出力されます:

NationalityName_1 Administration Academia New Department 1 New Department 2 New Department 3 New Department 5 
Algeria     0   1   0     0     0     0 

これは、上記のクエリとその正しいものの出力である、私が直面しています問題は、私は新しい部署を作成した場合、私は再度変更する必要があります私が望まないコード。 THIS

+0

次のようにダイナミックPIVOTを書くことができます?サンプルデータと期待される出力がなければ、それを処理することは非常に難しいからです。 – Susang

+0

はい私はクエリを実行することができます.. –

答えて

0

TRY:私たちは、私はあなたに動的なソリューションを提供する場合、あなたはあなたのコードであることに適用することができます

DECLARE @col VARCHAR(1000) 
DECLARE @sql VARCHAR(2000) 

SELECT @col = COALESCE(@col + ', ','') + QUOTENAME(DepartmentName_1) 
FROM HR_Department hr 
JOIN HR_EmploymentInformation h ON h.DepartmentID = hr.DepartmentID 
JOIN HR_EmployeeDetail e ON e.EmployeeID = h.EmployeeID 
JOIN GEN_Nationality g ON g.NationalityID = e.DefaultNationalityID 

SET @sql = ' 
    SELECT NationalityName_1, ' + @col + ' 
    FROM 
     (SELECT g.NationalityName_1, 
      DepartmentName_1, 
      h.EmployeeID 
     FROM HR_Department hr 
     JOIN HR_EmploymentInformation h ON h.DepartmentID = hr.DepartmentID 
     JOIN HR_EmployeeDetail e ON e.EmployeeID = h.EmployeeID 
     JOIN GEN_Nationality g ON g.NationalityID = e.DefaultNationalityID 
     ) AS fev 
    PIVOT 
    (
     COUNT(employeeId) 
     FOR departmentname_1 IN (' + @col + ') 
    ) AS pvt' 

EXEC (@sql) 
+0

私はあなたが言ったことを試みたが、それは私にエラーを与えています。私はコメントに私の質問を掲載することができません理由はわからない –

+0

更新されました。 – Susang

+0

メッセージ105、レベル15、状態1、行15 文字列 'Acad'の後ろの閉じられていない引用符。 メッセージ102、レベル15、状態1、行15 'Acad'の近くの構文が正しくありません。エラーが発生しています –

関連する問題