2

これは、次の構造に置き換えたい MSSQL 2008 [エラー コード] テーブルの一部です。回避策を探してみましたが、タスクを達成するための解決策が見つかりませんでした。集計関数を使用できないため、ピボットを使用することは実現不可能だと思います。誰かがこれを可能にする方法を教えてもらえますか?

+----------+-------+---------------------------------------------------+
| SKILL ID | SKILL |                     PARAMETER                     |
+----------+-------+---------------------------------------------------+
|        1 | 121   | STANDARD VERBIAGE & PROCEDURES                    |
|        1 | 121   | ISSUE IDENTIFICATION                              |
|        1 | 121   | CALL COURTESY                                     |
|        1 | 121   | ISSUE RESOLUTION                                  |
|        2 | BO    | COLLECTION PROCESS ADHERENCE                      |
|        2 | BO    | INTELLIGENCE PARAMETER                            |
|        3 | EM    | SOFT SKILLS                                       |
|        3 | EM    | PRODUCT KNOWLEDGE                                 |
|        3 | EM    | CALL CLOSING                                      |
|        3 | EM    | CALL  OPENING                                     |
|        4 | FLC   | RESOLUTION                                        |
|        4 | FLC   | NONE                                              |
|        5 | FTA   | OTHERS                                            |
|        5 | FTA   | HYGIENE FACTORS                                   |
|        5 | FTA   | ACCOUNT SCREEN                                    |
|        5 | FTA   |   ORDER , DOCUMENTATION AND CONFIGURATION         |
|        5 | FTA   | VALIDATION SCREEN                                 |
|        5 | FTA   | PARTY SCREEN                                      |
|        5 | FTA   | ORDER , DOCUMENTATION AND CONFIGURATION           |
|        6 | NCE   | COMPLIANCE                                        |
|        6 | NCE   | CRM                                               |
|        6 | NCE   | ACCOUNT LEVEL /INSTALLATION DETAILS CONFIRTMATION |
|        6 | NCE   | CONTENTS/BILL DETAILS                             |
|        6 | NCE   | SELFCARE                                          |
|        6 | NCE   | FEEDBACK/SATISFACTION                             |
|        6 | NCE   | OBJECTION RESOLUTION                              |
|        6 | NCE   | CUSTOMER HANDLING                                 |
|        6 | NCE   | RED ALERT                                         |
|        7 | RTO   | ZERO TOLERANCE                                    |
|        7 | RTO   | OVERALL IMPRESSION                                |
|        7 | RTO   | SUMMARY AND CLOSING                               |
|        7 | RTO   | PROCESS KNOWLEDGE                                 |
|        7 | RTO   | OPENING                                           |
|        8 | SHMNP | SKILL AREA                                        |
|        8 | SHMNP | CONVINCING SKILLS                                 |
+----------+-------+---------------------------------------------------+

これは予想される出力です

+-------+--------------------------------+------------------------+---------------------------------------------------+
| SKILL |           PARAMETER1           |       PARAMETER2       |  PARAMETER3                                       |
+-------+--------------------------------+------------------------+---------------------------------------------------+
| 121   | STANDARD VERBIAGE & PROCEDURES | ISSUE IDENTIFICATION   | CALL COURTESY                                     |
| BO    | COLLECTION PROCESS ADHERENCE   | INTELLIGENCE PARAMETER | NULL                                              |
| EM    | SOFT SKILLS                    | PRODUCT KNOWLEDGE      | CALL CLOSING                                      |
| FLC   | RESOLUTION                     | NONE                   | NULL                                              |
| FTA   | OTHERS                         | HYGIENE FACTORS        | ACCOUNT SCREEN                                    |
| NCE   | COMPLIANCE                     | CRM                    | ACCOUNT LEVEL /INSTALLATION DETAILS CONFIRTMATION |
| RTO   | ZERO TOLERANCE                 | OVERALL IMPRESSION     | SUMMARY AND CLOSING                               |
| SHMNP | SKILL AREA                     | CONVINCING SKILLS      | NULL                                              |
+-------+--------------------------------+------------------------+---------------------------------------------------+
4

1 に答える 1

11

PIVOT 関数を使用して結果を取得できます。使用する必要があるだけですrow_number()

この基本クエリは次のようになります。

select skill_id, skill, parameter,
  row_number() over(partition by skill, skill_id order by skill_id) rn
from yt;

SQL Fiddle with Demoを参照してください。androw_number()内の各行に個別の値を適用するために使用します。次に、この行番号の値を PIVOT の列として使用します。skillskill_id

PIVOT が適用された完全なコードは次のようになります。

select skill_id, skill,[Parameter_1], [Parameter_2], [Parameter_3]
from 
(
  select skill_id, skill, parameter,
    'Parameter_'+cast(row_number() over(partition by skill, skill_id 
                                     order by skill_id) as varchar(10)) rn
  from yt
) d
pivot
(
  max(parameter)
  for rn in ([Parameter_1], [Parameter_2], [Parameter_3])
) piv;

SQL Fiddle with Demoを参照してください。

あなたの場合、各スキルのパラメーターの数が不明なようです。その場合は、動的 SQL を使用して結果を取得します。

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Parameter_'
                          +cast(row_number() over(partition by skill, skill_id 
                               order by skill_id) as varchar(10))) 
                    from yt
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT skill_id, skill,' + @cols + ' from 
             (
                select skill_id, skill, parameter,
                  ''Parameter_''+cast(row_number() over(partition by skill, skill_id 
                                   order by skill_id) as varchar(10)) rn
                from yt
            ) x
            pivot 
            (
                max(parameter)
                for rn in (' + @cols + ')
            ) p '

execute(@query);

デモで SQL Fiddle を参照してください

于 2013-06-14T13:52:04.077 に答える