programing

SQL Server: 문자열 데이터 피벗 예시

easyjava 2023. 4. 14. 22:18
반응형

SQL Server: 문자열 데이터 피벗 예시

몇 가지 간단한 SQL Server 피벗 예를 찾는 중입니다.내가 찾은 대부분의 예는 숫자를 세거나 합산하는 것이다.문자열 데이터를 피벗하고 싶습니다.예를 들어, 다음 사항을 반환하는 쿼리가 있습니다.

Action1 VIEW  
Action1 EDIT  
Action2 VIEW  
Action3 VIEW  
Action3 EDIT  

가능한 한 피벗을 사용하여 다음과 같은 결과를 만들고 싶습니다.

Action1 VIEW EDIT  
Action2 VIEW NULL  
Action3 VIEW EDIT  

이것이 피벗 기능으로 가능합니까?

MAX 집계 함수는 숫자뿐만 아니라 텍스트에서도 작동합니다.이 쿼리에서는 테이블을 한 번만 스캔하면 됩니다.

SELECT Action,
       MAX( CASE data WHEN 'View' THEN data ELSE '' END ) ViewCol, 
       MAX( CASE data WHEN 'Edit' THEN data ELSE '' END ) EditCol
 FROM t
 GROUP BY Action

테이블 설정:

CREATE TABLE dbo.tbl (
    action VARCHAR(20) NOT NULL,
    view_edit VARCHAR(20) NOT NULL
);

INSERT INTO dbo.tbl (action, view_edit)
VALUES ('Action1', 'VIEW'),
       ('Action1', 'EDIT'),
       ('Action2', 'VIEW'),
       ('Action3', 'VIEW'),
       ('Action3', 'EDIT');

테이블:SELECT action, view_edit FROM dbo.tbl

테이블

피벗을 사용하지 않고 쿼리:

SELECT Action, 
[View] = (Select view_edit FROM tbl WHERE t.action = action and view_edit = 'VIEW'),
[Edit] = (Select view_edit FROM tbl WHERE t.action = action and view_edit = 'EDIT')
FROM tbl t
GROUP BY Action

피벗을 사용하여 쿼리:

SELECT [Action], [View], [Edit] FROM
(SELECT [Action], view_edit FROM tbl) AS t1 
PIVOT (MAX(view_edit) FOR view_edit IN ([View], [Edit]) ) AS t2

두 쿼리 모두 결과:
여기에 이미지 설명 입력

SQL Server 피벗 기능을 사용하는 경우 두 개의 원래 열이 act 및 cmd라고 불리는 경우 이 기능이 작동합니다(단, 보기엔 그다지 예쁘지 않습니다).

SELECT act AS 'Action', [View] as 'View', [Edit] as 'Edit'
FROM (
    SELECT act, cmd FROM data
) AS src
PIVOT (
    MAX(cmd) FOR cmd IN ([View], [Edit])
) AS pvt

http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/ 에서 :

SELECT CUST, PRODUCT, QTY
FROM Product) up
PIVOT
( SUM(QTY) FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)) AS pvt) p
UNPIVOT
(QTY FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)
) AS Unpvt
GO

음, 표본과 고유한 열의 수가 제한된 표본의 경우 이렇게 하면 됩니다.

select 
    distinct a,
    (select distinct t2.b  from t t2  where t1.a=t2.a and t2.b='VIEW'),
    (select distinct t2.b from t t2  where t1.a=t2.a and t2.b='EDIT')
from t t1
With pivot_data as
(
select 
action, -- grouping column
view_edit -- spreading column
from tbl
)
select action, [view], [edit]
from   pivot_data
pivot  ( max(view_edit) for view_edit in ([view], [edit]) ) as p;

문자열을 구문 분석하던 중 문제가 된 문자열의 처음 두 위치는 의료 보험 청구 코드 표준의 필드 이름입니다.문자열을 제거하고 F4, UR, UQ 등의 값을 가져옵니다.이것은 한 명의 사용자에 대해 한 개의 레코드 또는 몇 개의 레코드로도 훌륭했습니다.그러나 수백 개의 레코드와 모든 사용자의 값을 보려면 피벗(PIBOT)이것은 특히 뛰어난 레코드를 많이 수출하는 것에 있어서 훌륭했다.제가 받은 구체적인 보고서 요청은 "누군가 Benadryl에 대한 클레임을 제출할 때마다 필드 F4, UR 및 UQ에서 어떤 값을 제출했는가?"였습니다.ColTitle과 아래의 값 필드를 작성한 OUTER APPLY가 있습니다.

PIVOT(
  min(value)
  FOR ColTitle in([F4], [UR], [UQ])
 )

언급URL : https://stackoverflow.com/questions/24470/sql-server-examples-of-pivoting-string-data

반응형