-2

正しい行数を返すようにクエリを修正するためのサポートが必要です。以下の表には、ProductIDごとに12行が含まれています。私が欲しいのは、これらの12行を1行に変換し、製品IDごとに12列を設定することです。

生成された動的コードは1行のみを作成します

--Table this belongs to 

   Create table #Attributes
    (
            ProductID uniqueIdentifier,
            PAID Varchar(48), 
            Label nvarchar(50),
            AttrValue nvarchar(3072),
            unit nvarchar(50) 
    )
 . . . . . . .

select *
      from
      (
        select col + cast(rn as varchar(10)) new_col, val
        from 
        (
          select 
          Cast(PAID as NVarchar(3072)) PAID
          ,Cast (ProductID as NVarchar(3072)) ProductID
           ,Cast (Label  as NVarchar(3072)) Label
           ,Cast (Value as NVarchar(3072)) Value
           ,Cast (unit as NVarchar(3072))  unit  
            ,row_number() over(partition by ProductID order by ProductID) rn
          from #Attributes
        ) x
        unpivot
        (
          val
          for col in ([ProductID],[PAID],[Label],[Value],[unit])
        ) u
      ) x1
      pivot
      (
        max(val)
        for new_col in
          ([ProductID1],[PAID1],[Label1],[Value1],[unit1],[ProductID2],[PAID2],[Label2],[Value2],[unit2],[ProductID3],[PAID3],[Label3],[Value3],[unit3],[ProductID4],[PAID4],[Label4],[Value4],[unit4],[ProductID5],[PAID5],[Label5],[Value5],[unit5],[ProductID6],[PAID6],[Label6],[Value6],[unit6],[ProductID7],[PAID7],[Label7],[Value7],[unit7],[ProductID8],[PAID8],[Label8],[Value8],[unit8],[ProductID9],[PAID9],[Label9],[Value9],[unit9],[ProductID10],[PAID10],[Label10],[Value10],[unit10],[ProductID11],[PAID11],[Label11],[Value11],[unit11],[ProductID12],[PAID12],[Label12],[Value12],[unit12],[ProductID13],[PAID13],[Label13],[Value13],[unit13],[ProductID14],[PAID14],[Label14],[Value14],[unit14],[ProductID15],[PAID15],[Label15],[Value15],[unit15],[ProductID16],[PAID16],[Label16],[Value16],[unit16],[ProductID17],[PAID17],[Label17],[Value17],[unit17],[ProductID18],[PAID18],[Label18],[Value18],[unit18],[ProductID19],[PAID19],[Label19],[Value19],[unit19],[ProductID20],[PAID20],[Label20],[Value20],[unit20],[ProductID21],[PAID21],[Label21],[Value21],[unit21])
      ) p

現在のコードは、1行のデータのみを生成し、テーブル内の他のProductIDを無視します。この問題を解決するためにいくつかの助けをいただければ幸いです。ありがとう。

以下に表を示します(列の分割線のないExcelを考えてください。製品IDフィールドには値がありますが、PAID、LABEL、VALUE、およびUNIT列には値がありません。そのため、表では空白で表示されます。

PRODUCTID                                  PAID       LABEL         VALUE        UNIT
--------------------------------------------------------------------------------------
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
F4D58DCE-8EED-40E3-BF4C-07349BEC0A3E                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
ACF57CF7-7206-46F5-A341-16E1B9828DBC                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
95CF8634-DF1C-4E12-9584-56D726F9D3FD                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
C4196FB0-AAE1-4BC4-A6E3-630B90D249C1                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
A5A24B87-E4E7-4282-8BB1-7413198A7D1A                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
7EECE72B-26C5-4306-9706-85E344243122                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
60B1AB86-E0EB-41AE-858C-AAD4744FD49C                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
44CDDEC6-4889-491B-A896-B719C5B9F3E4                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
3866BBA2-624A-43B7-A04D-DE8ADF5DF739                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
AA0A3639-2A36-4731-BF3F-F278D54A99C8                          
4

1 に答える 1

1

ProductIDUNPIVOT列リストから除外し、それに応じて、PIVOT列リストからすべての列を除外しますProductID*。また、ProductIDサブクエリのSELECTに含めます。

select *
      from
      (
        select [ProductID], col + cast(rn as varchar(10)) new_col, val
        from 
        (
          select 
          Cast(PAID as NVarchar(3072)) PAID
          ,Cast (ProductID as NVarchar(3072)) ProductID
           ,Cast (Label  as NVarchar(3072)) Label
           ,Cast (Value as NVarchar(3072)) Value
           ,Cast (unit as NVarchar(3072))  unit  
            ,row_number() over(partition by ProductID order by ProductID) rn
          from #Attributes
        ) x
        unpivot
        (
          val
          for col in ([ProductID],[PAID],[Label],[Value],[unit])
        ) u
      ) x1
      pivot
      (
        max(val)
        for new_col in
          ([ProductID1],[PAID1],[Label1],[Value1],[unit1],
           [ProductID2],[PAID2],[Label2],[Value2],[unit2],
           [ProductID3],[PAID3],[Label3],[Value3],[unit3],
           [ProductID4],[PAID4],[Label4],[Value4],[unit4],
           [ProductID5],[PAID5],[Label5],[Value5],[unit5],
           [ProductID6],[PAID6],[Label6],[Value6],[unit6],
           [ProductID7],[PAID7],[Label7],[Value7],[unit7],
           [ProductID8],[PAID8],[Label8],[Value8],[unit8],
           [ProductID9],[PAID9],[Label9],[Value9],[unit9],
           [ProductID10],[PAID10],[Label10],[Value10],[unit10],
           [ProductID11],[PAID11],[Label11],[Value11],[unit11],
           [ProductID12],[PAID12],[Label12],[Value12],[unit12],
           [ProductID13],[PAID13],[Label13],[Value13],[unit13],
           [ProductID14],[PAID14],[Label14],[Value14],[unit14],
           [ProductID15],[PAID15],[Label15],[Value15],[unit15],
           [ProductID16],[PAID16],[Label16],[Value16],[unit16],
           [ProductID17],[PAID17],[Label17],[Value17],[unit17],
           [ProductID18],[PAID18],[Label18],[Value18],[unit18],
           [ProductID19],[PAID19],[Label19],[Value19],[unit19],
           [ProductID20],[PAID20],[Label20],[Value20],[unit20],
           [ProductID21],[PAID21],[Label21],[Value21],[unit21])
      ) p

更新:上記の解決策の説明。

クエリでは、xサブクエリは次のようなデータを返します。

ProductID  PAID   Label   Value   unit   rn
---------  -----  ------  ------  -----  ---
A          ...    ...     ...     ...    1
A          ...    ...     ...     ...    2
...        ...    ...     ...     ...    ...
B          ...    ...     ...     ...    1
...        ...    ...     ...     ...    ...

節はそれらを次のUNPIVOTように変換します:

rn   col        val
---  ---------  -----
1    ProductID  A
1    PAID       ...
1    Label      ...
1    Value      ...
1    unit       ...
2    ProductID  A
2    PAID       ...
2    Label      ...
2    Value      ...
2    unit       ...
...  ...        ...
1    ProductID  B
1    PAID       ...
1    Label      ...
1    Value      ...
1    unit       ...

また、SELECT句は、最初の2つの列を連結して、以下を返します。

new_col     val
----------  -----
ProductID1  A
PAID1       ...
Label1      ...
Value1      ...
unit1       ...
ProductID2  A
PAID2       ...
Label2      ...
Value2      ...
unit2       ...
...         ...
ProductID1  B
PAID1       ...
Label1      ...
Value1      ...
unit1       ...
...         ...

これが、最終的にピボットされる行セットです。この時点では、SQLServerが製品の属性と製品Aの属性を区別する方法がないことに注意してくださいB。PIVOT句は、GROUP BYと同様に機能し、同じnew_col値を持つすべての値を適用MAX()して1つにまとめます。ピボットされていない列がある場合、行はその列の値に基づいてグループに分割されます。ただし、上記の行セットには誰もいないため、すべての行が1つにまとめられます。

代わりに必要なのは、最後の1つの行セットを次のようにすることです。

ProductID  new_col  val
---------  -------  -----
A          PAID1    ...
A          Label1   ...
A          Value1   ...
A          unit1    ...
A          PAID2    ...
A          Label2   ...
A          Value2   ...
A          unit2    ...
...        ...      ...
B          PAID1    ...
B          Label1   ...
B          Value1   ...
B          unit1    ...
...        ...      ...

つまり、この列により、SQLServerは製品に属するものとに属するものProductIDを区別できます。PAID1AB

その行セットを取得するにProductIDは、UNPIVOT句から除外し、代わりにピボットされていない列と一緒にプルする必要があります。またProductID、UNPIVOT列リストから除外されているため、すべてのProductID1ProductID2などもPIVOT列リストから除外する必要があります。これは、上記のクエリで実行されたことがわかります。

于 2012-10-13T22:41:27.847 に答える