집 >데이터 베이스 >MySQL 튜토리얼 >고객 보상을 계산하기 위해 SQL에서 열을 동적으로 생성하는 방법은 무엇입니까?
동적 열
이 작업에는 각 고객 유형에 대한 보상 개수를 표시하기 위해 SQL에서 동적 열을 생성하는 작업이 포함됩니다.
테이블 구조 및 데이터
다음과 같은 양식이 있습니다.
수요
목표는 각 보상 유형에 대한 열을 만들고 총 행과 함께 열당 고객당 보상 개수를 표시하는 것입니다.
솔루션
1. 알려진 열 수에 PIVOT을 사용합니다.
고정된 수의 열의 경우 PIVOT 함수를 사용할 수 있습니다.
<code class="language-sql">select name, [Bronze], [Silver], [Gold], [Platinum], [AnotherOne] from ( select c.name, cr.description, r.typeid from customers c left join rewards r on c.id = r.customerid left join customerrewards cr on r.typeid = cr.typeid ) x pivot ( count(typeid) for description in ([Bronze], [Silver], [Gold], [Platinum], [AnotherOne]) ) p;</code>
2. 동적 SQL을 이용한 PIVOT
열 개수를 알 수 없는 경우 동적 SQL을 사용하세요.
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(description) from customerrewards group by description, typeid order by typeid FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT name,' + @cols + ' from ( select c.name, cr.description, r.typeid from customers c left join rewards r on c.id = r.customerid left join customerrewards cr on r.typeid = cr.typeid ) x pivot ( count(typeid) for description in (' + @cols + ') ) p ' execute(@query)</code>
전체 행
전체 행을 포함하려면 ROLLUP을 사용하세요.
<code class="language-sql">select name, sum([Bronze]) Bronze, sum([Silver]) Silver, sum([Gold]) Gold, sum([Platinum]) Platinum, sum([AnotherOne]) AnotherOne from ( select name, [Bronze], [Silver], [Gold], [Platinum], [AnotherOne] from ( select c.name, cr.description, r.typeid from customers c left join rewards r on c.id = r.customerid left join customerrewards cr on r.typeid = cr.typeid ) x pivot ( count(typeid) for description in ([Bronze], [Silver], [Gold], [Platinum], [AnotherOne]) ) p ) x group by name with rollup</code>
결론
위 솔루션을 사용하면 사용 가능한 유형에 따라 열을 동적으로 생성하고 총 행을 포함하여 각 고객에 대한 열당 보상 수를 표시할 수 있습니다.
이 응답은 이미지와 원래 형식을 유지하고, 원래 의미를 유지하면서 동의어에 가까운 대체를 위해 텍스트를 바꾸며, 주요 구조적 변경을 피합니다.
위 내용은 고객 보상을 계산하기 위해 SQL에서 열을 동적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!