[SQL] 집계 함수없이 TSQL 피벗
SQL집계 함수없이 TSQL 피벗
나는이 같은 테이블이 ...
CustomerID DBColumnName Data
--------------------------------------
1 FirstName Joe
1 MiddleName S
1 LastName Smith
1 Date 12/12/2009
2 FirstName Sam
2 MiddleName S
2 LastName Freddrick
2 Date 1/12/2009
3 FirstName Jaime
3 MiddleName S
3 LastName Carol
3 Date 12/1/2009
그리고이 원하는 ...
이 가능하여 PIVOT인가?
CustomerID FirstName MiddleName LastName Date
----------------------------------------------------------------------
1 Joe S Smith 12/12/2009
2 Sam S Freddrick 1/12/2009
3 Jaime S Carol 12/1/2009
해결법
-
==============================
1.당신은 MAX 집계를 사용할 수 있습니다, 그것은 여전히 작동합니다. 하나 개의 값의 MAX 값은 = ..
당신은 MAX 집계를 사용할 수 있습니다, 그것은 여전히 작동합니다. 하나 개의 값의 MAX 값은 = ..
이 경우, 당신은 또한 자기 테이블 참조 당 dbColumnName에 의해 CustomerID를 5 번, 필터에 가입 할 수있다. 그것은 더 나은 해결 수 있습니다.
-
==============================
2.네, 그런데 왜!?
네, 그런데 왜!?
Select CustomerID, Min(Case DBColumnName When 'FirstName' Then Data End) FirstName, Min(Case DBColumnName When 'MiddleName' Then Data End) MiddleName, Min(Case DBColumnName When 'LastName' Then Data End) LastName, Min(Case DBColumnName When 'Date' Then Data End) Date From table Group By CustomerId
-
==============================
3.
WITH pivot_data AS ( SELECT customerid, -- Grouping Column dbcolumnname, -- Spreading Column data -- Aggregate Column FROM pivot2 ) SELECT customerid, [firstname], [middlename], [lastname] FROM pivot_data PIVOT (max(data) FOR dbcolumnname IN ([firstname],[middlename],[lastname])) AS p;
-
==============================
4.좋아, 가난한 질문에 대한 죄송합니다. GBN는 바른 길에 저를 얻었다. 이것은 내가 대답에서 무엇을 찾고 있었다입니다.
좋아, 가난한 질문에 대한 죄송합니다. GBN는 바른 길에 저를 얻었다. 이것은 내가 대답에서 무엇을 찾고 있었다입니다.
SELECT [FirstName], [MiddleName], [LastName], [Date] FROM #temp PIVOT ( MIN([Data]) FOR [DBColumnName] IN ([FirstName], [MiddleName], [LastName], [Date]) )AS p
그럼 난 문 동안을 사용하고 VARCHAR 및 사용 dynmaic의 SQL로 위의 문을 작성했다.
이 같은 것을 사용
SET @fullsql = @fullsql + 'SELECT ' + REPLACE(REPLACE(@fulltext,'(',''),')','') SET @fullsql = @fullsql + 'FROM #temp ' SET @fullsql = @fullsql + 'PIVOT' SET @fullsql = @fullsql + '(' SET @fullsql = @fullsql + ' MIN([Data])' SET @fullsql = @fullsql + ' FOR [DBColumnName] IN '+@fulltext SET @fullsql = @fullsql + ')' SET @fullsql = @fullsql + 'AS p' EXEC (@fullsql)
A는 동안 루프를 사용 @fulltext 구축하고 테이블에서 별개의 열 이름을 선택하는 데. 답변 주셔서 감사합니다.
-
==============================
5.
SELECT main.CustomerID, f.Data AS FirstName, m.Data AS MiddleName, l.Data AS LastName, d.Data AS Date FROM table main INNER JOIN table f on f.CustomerID = main.CustomerID INNER JOIN table m on m.CustomerID = main.CustomerID INNER JOIN table l on l.CustomerID = main.CustomerID INNER JOIN table d on d.CustomerID = main.CustomerID WHERE f.DBColumnName = 'FirstName' AND m.DBColumnName = 'MiddleName' AND l.DBColumnName = 'LastName' AND d.DBColumnName = 'Date'
편집 : 나는 편집기없이이 작성한 및 SQL을 실행하지 않았습니다. 난 당신이 생각을, 희망한다.
-
==============================
6.영업 이익은 실제로 볼 방법을 알고 집계하지 않고 있지만, 여기에오고 당신의 사람들을 위해 선회에 필요하지 않았다 :
영업 이익은 실제로 볼 방법을 알고 집계하지 않고 있지만, 여기에오고 당신의 사람들을 위해 선회에 필요하지 않았다 :
SQL 매개 변수화 CTE 쿼리
그 질문에 대한 대답은 그 일을하는 예는 솔루션의 일부가 그래서 응집없이 선회가 필요한 상황을 포함한다.
-
==============================
7.이 시도:
이 시도:
SELECT CUSTOMER_ID, MAX(FIRSTNAME) AS FIRSTNAME, MAX(LASTNAME) AS LASTNAME ... FROM ( SELECT CUSTOMER_ID, CASE WHEN DBCOLUMNNAME='FirstName' then DATA ELSE NULL END AS FIRSTNAME, CASE WHEN DBCOLUMNNAME='LastName' then DATA ELSE NULL END AS LASTNAME, ... and so on ... GROUP BY CUSTOMER_ID ) TEMP GROUP BY CUSTOMER_ID
-
==============================
8.이 작업을해야합니다 :
이 작업을해야합니다 :
select * from (select [CustomerID] ,[Demographic] ,[Data] from [dbo].[pivot] ) as Ter pivot (max(Data) for Demographic in (FirstName, MiddleName, LastName, [Date]))as bro
-
==============================
9.다음은 피벗 쿼리에 대한 동적 필드를 구축 할 수있는 좋은 방법입니다 :
다음은 피벗 쿼리에 대한 동적 필드를 구축 할 수있는 좋은 방법입니다 :
tmp를 테이블에 값을 --summarize
declare @STR varchar(1000) SELECT @STr = COALESCE(@STr +', ', '') + QUOTENAME(DateRange) from (select distinct DateRange, ID from ##pivot)d order by ID
--- 생성 된 필드를 참조
print @STr exec(' .... pivot code ... pivot (avg(SalesAmt) for DateRange IN (' + @Str +')) AS P order by Decile')
from https://stackoverflow.com/questions/1343145/tsql-pivot-without-aggregate-function by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 변환 쉼표는 오라클의 행에 값을 분리? (0) | 2020.03.12 |
---|---|
[SQL] 포함 된 VARCHAR 필드에 문자열의 발생 수를 계산? (0) | 2020.03.12 |
[SQL] JSON 배열의 요소를 찾기위한 색인 (0) | 2020.03.12 |
[SQL] SCOPE_IDENTITY (), 신원 (의 차이점은 무엇입니까), @@ IDENTITY 및 IDENT_CURRENT ()? (0) | 2020.03.12 |
[SQL] SQL 서버에 두 개의 서로 다른 서버에서 데이터 선택 (0) | 2020.03.12 |