을 찾고 이것은 내가 사용하는 코드이며, 그 결과는 아래에 게시 어떻게이 '이름'이 결과에 나타 났습니까? ProductID
을 이름 대신 표시하려면 어떻게해야합니까?TSQL 코드 설명
도움이나 의견을 보내 주시면 대단히 감사하겠습니다.
을 찾고 이것은 내가 사용하는 코드이며, 그 결과는 아래에 게시 어떻게이 '이름'이 결과에 나타 났습니까? ProductID
을 이름 대신 표시하려면 어떻게해야합니까?TSQL 코드 설명
도움이나 의견을 보내 주시면 대단히 감사하겠습니다.
ProductID
은 테이블을 피벗하면서 집계 열로 사용했기 때문에 표시되지 않습니다. 각 색상에 대한 제품 ID의 개수 만 표시됩니다. ProductID
을 보려면 쿼리의 피벗 부분을 제거하십시오. Name
은 내부 쿼리에 있기 때문에 최종 결과에 표시됩니다.
테이블을 회전하면 행이 열로 변경됩니다. 귀하의 경우 Red, Blue, Silver, Black, Yellow, Gray, Multi, Uncolored (피벗 절 내부에 주어진대로)의 행 값이 열로 변경됩니다. 각 열 아래에서 해당 색의 테이블에있는 ProductID 수와 '이름'열의 이름이 표시됩니다. 따라서 쿼리에서 개별 제품 ID가 표시되지 않습니다. ProductID
열의 내부 쿼리는 계산 계산에만 사용되며 최종 결과에는 표시되지 않습니다.
나는 당신에게 맡긴다. 그러나 나는 또한 질문의 논리적 구현을 설명 할 것이다. 피벗 내부에서 ProductID로 그룹화하려는 경우 ... 잘 작동하지 않습니다. –
@clifton_h가 설명을 추가했습니다. –
PIVOT
은 표준 SQL 연산자가 아니더라도 SQL Server에서 정의한 연산자입니다. PIVOT
연산자없이 데이터를 피벗하려면 어떻게해야합니까? 그것은 간단합니다. 간단히하기 위해 null 색상을 무시합시다.
SELECT
P.ProductID, PC.Name,
COUNT(CASE WHEN P.Color = 'Red' THEN 1 END) AS Red,
COUNT(CASE WHEN P.Color = 'Blue' THEN 1 END) AS Blue,
...
FROM
SalesLT.ProductCategory AS PC
JOIN
SalesLT.Product AS P ON PC.ProductCategoryID = P.ProductCategoryID
GROUP BY P.ProductID, PC.Name;
PIVOT
정확히 위와 같은 동작을 수행합니다. PIVOT 연산자에 GROUP BY
절을 쓸 필요가 없다는 것을 알았습니다. 그 이유는 다음과 같습니다.
(From Itzik Ben-Gan's T-SQL Fundamentals)
The PIVOT operator figures out the grouping elements implicitly by elimination. The grouping elements are all attributes from the source table that were not specified as either the spreading element or the aggregation element.
문제를 해결하려면 ProductId 속성을 PIVOT 연산자의 집계 요소에 넣지 마십시오. COUNT
귀하의 경우 모든 속성이 작동합니다. 당신은 쓸 수
- 오 ** 네, 그렇게했습니다! ** SELECT ..., PC.Name, ....가있는 하위 쿼리에서 SELECT *를하고 있습니다. 바로 거기에있는'Name' 칼럼입니다! – scrappedcola
'에 의해 쿼리'SELECT P.ProductID, PC.Name'하고 심지어 위해의
–ORDER BY ProductID를 입력하면 다음 오류가 발생합니다. 'ProductID'가 잘못되었습니다 – blackknight316