복붙노트

[SQL] MSSQL 2008 R2 집계 기능이없는 피벗

SQL

MSSQL 2008 R2 집계 기능이없는 피벗

여기에 내가 구조를 다음과 트랜스하려는 내 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                                 |
+----------+-------+---------------------------------------------------+

이 5 월 예상 출력

+-------+--------------------------------+------------------------+---------------------------------------------------+
| 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                                              |
+-------+--------------------------------+------------------------+---------------------------------------------------+

해결법

  1. ==============================

    1.당신은 결과를 얻기 위해 PIVOT 기능을 사용할 수 있습니다, 당신은 도움말을 ROW_NUMBER ()를 사용해야합니다.

    당신은 결과를 얻기 위해 PIVOT 기능을 사용할 수 있습니다, 당신은 도움말을 ROW_NUMBER ()를 사용해야합니다.

    이에 대한 기본 쿼리는 다음과 같습니다

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

    데모와 SQL 바이올린을 참조하십시오. 나는 기술 내에서 각 행에 고유 한 값을 적용 할 ROW_NUMBER ()를 사용하고 skill_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 바이올린을 참조하십시오.

    각 기술에 대한 매개 변수의 알 수없는 번호가됩니다 같이 귀하의 경우에는, 그것은 보인다. 그게 사실이라면, 당신은 결과를 얻기 위해 동적 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 바이올린을 참조하십시오

  2. from https://stackoverflow.com/questions/17109958/pivot-without-aggregate-function-in-mssql-2008-r2 by cc-by-sa and MIT license