[SQL] 열과 행을 변환하는 방법
SQL열과 행을 변환하는 방법
는 SQL Server 2005 데이터베이스를 조회 할 때 나는 간단한 문제가 있습니다. 나는 고객과 제품 (1> M)라는 테이블을 가지고있다. 한 고객은 대부분이 개 제품을 가지고있다. 대신 출력으로
CUSTOMERNAME, 제품 이름 ...
I는 출력에 좋아
CUSTOMERNAME, Product1Name, Product2Name ...
누군가의 도움이 날 수 있을까?
감사!
해결법
-
==============================
1.다른 사람이 말한 것처럼, 당신은 PIVOT 및 UNPIVOT 연산자를 사용할 수 있습니다. 불행하게도, 모두 PIVOT 및 UNPIVOT의 문제점 중 하나는 당신이 사전에 또는 다른 사용하는 동적 SQL에서의 선회 될 값을 알 필요가 있습니다.
다른 사람이 말한 것처럼, 당신은 PIVOT 및 UNPIVOT 연산자를 사용할 수 있습니다. 불행하게도, 모두 PIVOT 및 UNPIVOT의 문제점 중 하나는 당신이 사전에 또는 다른 사용하는 동적 SQL에서의 선회 될 값을 알 필요가 있습니다.
귀하의 경우, 동적 SQL을 사용하는 필요 해요, 같은데. 이 작업을 얻으려면 잘은 제품 목록 조회에서 사용되는 끌어해야합니다. 당신이 AdventureWorks 데이터베이스를 사용한다면, 당신의 코드는 다음과 같을 것이다 :
USE AdventureWorks; GO DECLARE @columns NVARCHAR(MAX); SELECT x.ProductName INTO #products FROM (SELECT p.[Name] AS ProductName FROM Purchasing.Vendor AS v INNER JOIN Purchasing.PurchaseOrderHeader AS poh ON v.VendorID = poh.VendorID INNER JOIN Purchasing.PurchaseOrderDetail AS pod ON poh.PurchaseOrderID = pod.PurchaseOrderID INNER JOIN Production.Product AS p ON pod.ProductID = p.ProductID GROUP BY p.[Name]) AS x; SELECT @columns = STUFF( (SELECT ', ' + QUOTENAME(ProductName, '[') AS [text()] FROM #products FOR XML PATH ('') ), 1, 1, ''); SELECT @columns;
이제 당신은 당신의 열을 가지고, 당신은 당신이 동적 쿼리와에 피벗 필요는 모든 것을 해낼 수 :
DECLARE @sql NVARCHAR(MAX); SET @sql = 'SELECT CustomerName, ' + @columns + ' FROM ( // your query goes here ) AS source PIVOT (SUM(order_count) FOR product_name IN (' + @columns + ') AS p'; EXEC sp_executesql @sql
당신은 당신이 괜찮은 값을 얻을 수 있도록해야하는 경우 물론, 당신은 당신이 빌드 @columns에 사용하는 논리를 복제 유착에 코드를 잡아 것 @coalesceColumns 변수 (컬럼 이름, 0)를 생성 할 수 있습니다 경우 당신이 필요 쿼리에서 그런 종류의 물건.
-
==============================
2.피벗 약 2 개 링크 여기 :
피벗 약 2 개 링크 여기 :
http://www.tsqltutorials.com/pivot.php
http://www.simple-talk.com/sql/t-sql-programming/creating-cross-tab-queries-and-pivot-tables-in-sql/
나는 피벗 내 문제를 해결하기)
-
==============================
3.SQL2005에서 "PIVOT"열과 행 사이에서 변환하는데 사용될 수있다 "UNPIVOT"이라는 기능이있다.
SQL2005에서 "PIVOT"열과 행 사이에서 변환하는데 사용될 수있다 "UNPIVOT"이라는 기능이있다.
그것이 당신을 도울 수 있기를 바랍니다.
-
==============================
4.다른 언급했듯이, SQL 2005은 아마 일반적인 사용을 위해 가장 적합한 PIVOT 기능을 가지고 있습니다. 그러나 경우에, 당신은 단순히 같은 것을 할 수 있습니다.
다른 언급했듯이, SQL 2005은 아마 일반적인 사용을 위해 가장 적합한 PIVOT 기능을 가지고 있습니다. 그러나 경우에, 당신은 단순히 같은 것을 할 수 있습니다.
Select Customer, Sum(Case When Product = 'Foo' Then 1 Else 0 End) Foo_Count, Sum(Case When Product = 'Bar' Then 1 Else 0 End) Bar_Count From Customers_Products Group By Customer
from https://stackoverflow.com/questions/347624/how-to-transform-rows-to-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 리드 및 래그 함수 테라 당량 (0) | 2020.07.06 |
---|---|
[SQL] 센서 / 읽기 / 경고 데이터베이스 설계에 대한 의견 (0) | 2020.07.06 |
[SQL] 다른 테이블을 기반으로 업데이트 테이블 (0) | 2020.07.06 |
[SQL] SQL 테이블에 Active Directory 데이터 (0) | 2020.07.06 |
[SQL] 자신의 SQL Server 2005의 책과 SQL 서버 2008 책에 Itzik 벤 웨이 코 뮤니시의 논리 질의 처리 순서에 대해 혼란 (0) | 2020.07.06 |