[SQL] 열의 알 수없는 번호에 SQL Server 2005의 피벗
SQL열의 알 수없는 번호에 SQL Server 2005의 피벗
나는 다음과 같이 보입니다 데이터 세트와 함께 일하고 있습니다.
이름과 과제의 수는 I는 다음과 유사한 결과를 얻을 필요가 동적입니다.
이제 이상적 I 포함 / 각각의 할당과 연관 될 수있는 "기한"을 기준으로 열을 정렬하고 싶습니다. 수 (그것은 계산하고 쿼리 가능하면 제거 할 수있다.) 경우 총 끝에되어야
나는 단순히 열을 명명, 내가 아직위한 좋은 해결책을 찾을 수없는 것을 동적 방식으로 그것을 할 노력과 피벗을 사용하여 3 개 과제를 위해 작업을 수행하는 방법을 알고있다. 나는 SQL 서버 2005이 작업을 수행하려합니다
편집하다
그 정책에 대해 같이 이상적으로는, 동적 SQL을 사용하지 않고이를 구현하고 싶습니다. 그것이 불가능하다면 ... 다음 동적 SQL로 동작하는 예제가 작동합니다.
해결법
-
==============================
1.난 당신이 더 동적 SQL을 말했다 알지만, 바로 SQL에서 그것을 할 수있는 방법이 표시되지 않습니다.
난 당신이 더 동적 SQL을 말했다 알지만, 바로 SQL에서 그것을 할 수있는 방법이 표시되지 않습니다.
당신은 SQL 2005에서 피벗 테이블과 연결하여 열 및 PIVOT에서 유사한 문제에 대한 내 대답을 확인해보세요
동적 SQL 주입에 취약가없는, 그것을 금지 할 이유가 없다. 또 다른 가능성 (데이터가 매우 자주 변화하는 경우) 코드를 생성 할 것이다 - 대신 동적 SQL 중, SQL 정기적 저장 프로 시저를 생성한다.
-
==============================
2.PIVOT 귀하는 2005 + SQL Server에서 다음 코드를 사용할 수있는 SQL 동적를 사용하여이 데이터 :
PIVOT 귀하는 2005 + SQL Server에서 다음 코드를 사용할 수있는 SQL 동적를 사용하여이 데이터 :
테이블 만들기 :
CREATE TABLE yourtable ([StudentName] varchar(8), [AssignmentName] varchar(12), [Grade] int) ; INSERT INTO yourtable ([StudentName], [AssignmentName], [Grade]) VALUES ('StudentA', 'Assignment 1', 100), ('StudentA', 'Assignment 2', 80), ('StudentA', 'Total', 180), ('StudentB', 'Assignment 1', 100), ('StudentB', 'Assignment 2', 80), ('StudentB', 'Assignment 3', 100), ('StudentB', 'Total', 280) ;
동적 PIVOT :
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT distinct ',' + QUOTENAME(AssignmentName) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT StudentName, ' + @cols + ' from ( select StudentName, AssignmentName, grade from yourtable ) x pivot ( min(grade) for assignmentname in (' + @cols + ') ) p ' execute(@query)
데모와 SQL 바이올린을 참조하십시오
결과는 다음과 같습니다
| STUDENTNAME | ASSIGNMENT 1 | ASSIGNMENT 2 | ASSIGNMENT 3 | TOTAL | -------------------------------------------------------------------- | StudentA | 100 | 80 | (null) | 180 | | StudentB | 100 | 80 | 100 | 280 |
-
==============================
3.내가이 일을 찾은 유일한 방법은 동적 SQL을 사용하고 변수에 열 레이블을 배치하는 것입니다.
내가이 일을 찾은 유일한 방법은 동적 SQL을 사용하고 변수에 열 레이블을 배치하는 것입니다.
-
==============================
4.그런 다음, 열 이름 및 유형을 얻을 당신이 당신의 결과 집합을 빌드 할 때 서브 쿼리 결과를 사용하는 INFORMATION_SCHEMA를 조회 할 수 있습니다. 당신은 가능성이 로그인의 접근을 약간 수정해야합니다.
그런 다음, 열 이름 및 유형을 얻을 당신이 당신의 결과 집합을 빌드 할 때 서브 쿼리 결과를 사용하는 INFORMATION_SCHEMA를 조회 할 수 있습니다. 당신은 가능성이 로그인의 접근을 약간 수정해야합니다.
-
==============================
5.이것은 SQL 2005에서 PIVOT과 동일
이것은 SQL 2005에서 PIVOT과 동일
이 데이터는 보고서에서 소비하는 경우 당신은 SSRS 행렬을 사용할 수 있습니다. 이 결과 집합에서 동적으로 열을 생성합니다. 나는 그것을 여러 번 사용했습니다 - 그것은 동적 교차 분석 보고서 꽤 잘 작동합니다.
여기에 좋은 예 w / 동적 SQL이다. http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx
-
==============================
6.
SELECT TrnType INTO #Temp1 FROM ( SELECT '[' + CAST(TransactionType AS VARCHAR(4)) + ']' AS TrnType FROM tblPaymentTransactionTypes ) AS tbl1 SELECT * FROM #Temp1 SELECT * FROM ( SELECT FirstName + ' ' + LastName AS Patient, TransactionType, ISNULL(PostedAmount, 0) AS PostedAmount FROM tblPaymentTransactions INNER JOIN emr_PatientDetails ON tblPaymentTransactions.PracticeID = emr_PatientDetails.PracticeId INNER JOIN tblPaymentTransactionDetails ON emr_PatientDetails.PatientId = tblPaymentTransactionDetails.PatientID AND tblPaymentTransactions.TransactionID = tblPaymentTransactionDetails.TransactionID WHERE emr_PatientDetails.PracticeID = 152 ) tbl PIVOT (SUM(PostedAmount) FOR [TransactionType] IN (SELECT * FROM #Temp1) ) AS tbl4
-
==============================
7.
select studentname,[Assign1],[Assign2],[Assign3],[Total] from ( select studentname, assignname, grade from student )s pivot(sum(Grade) for assignname IN([Assign1],[Assign2],[Assign3],[Total])) as pvt
from https://stackoverflow.com/questions/213702/sql-server-2005-pivot-on-unknown-number-of-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 두 개의 서로 다른 열에 대한 또 다른 SQL 테이블에서 데이터를 일치 얻을 : 내부 가입 및 / 또는 조합? (0) | 2020.03.21 |
---|---|
[SQL] 어떻게 여러 열 값을 하나의 열 값을 분할하려면? (0) | 2020.03.21 |
[SQL] 어떻게 사람의 여러 일을 만들 수 있습니다 (0) | 2020.03.21 |
[SQL] 여러 INNER은 SQL 액세스 가입 (0) | 2020.03.21 |
[SQL] 날짜 사이 SQL 선택 (0) | 2020.03.21 |