어쩌면 무언가를 따라
CREATE TABLE #tbl (AccountManager VARCHAR(100), Action VARCHAR(100),Count INT)
INSERT INTO #tbl
VALUES
('Joe','Client Negotiation',10),
('Bloggs','Closing',1),
('Aunty','Email',12),
('Marie','Preparing Contract',32)
당신이 열 정적 인 것을 알고 있다면. 그럼 당신은이 작업을 수행 할 수 있습니다
먼저 고유 열 이름 : 동적 피벗과 같은 그런
DECLARE @cols VARCHAR(MAX),
@colsWithIsNull VARCHAR(MAX)
;WITH CTE
AS
(
SELECT
ROW_Number() OVER(PARTITION BY tbl.Action ORDER BY tbl.Action) AS iRank,
tbl.Action
FROM
#tbl AS tbl
)
SELECT @cols = COALESCE(@cols + ','+QUOTENAME(Action),
QUOTENAME(Action)),
@colsWithIsNull=COALESCE(@colsWithIsNull + ',ISNULL('+QUOTENAME(Action)+',0) AS '+QUOTENAME(Action),
'ISNULL('+QUOTENAME(Action)+',0) AS '+QUOTENAME(Action))
FROM
CTE
WHERE
iRank=1
:
SELECT
AccountManager,
ISNULL([Client Negotiation],0) AS [Client Negotiation],
ISNULL([Closing],0) AS [Closing],
ISNULL([Email],0) AS [Email],
ISNULL([Preparing Contract],0) AS [Preparing Contract]
FROM
(
SELECT
tbl.AccountManager,
tbl.Action,
tbl.Count
FROM
#tbl AS tbl
) AS p
PIVOT
(
SUM([Count])
FOR [Action] IN([Client Negotiation],[Closing],[Email],[Preparing Contract])
) AS pvt
그렇지 않으면이 같은 동적 피벗을 할 필요가
DECLARE @query NVARCHAR(4000)=
N'SELECT
AccountManager,
'[email protected]+'
FROM
(
SELECT
tbl.AccountManager,
tbl.Action,
tbl.Count
FROM
#tbl AS tbl
) AS p
PIVOT
(
SUM([Count])
FOR [Action] IN('[email protected]+')
) AS pvt'
EXECUTE(@query)
내 경우에는 임시 테이블을 삭제합니다.
DROP TABLE #tbl
[무엇을 시도해 봤습니까?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) –
AccountManager를 사용하여 원본 테이블을 가져 왔지만, Action, Count 열은 필요한 테이블을 얻기 위해 생각할 수있는 유일한 방법이지만 커서를 사용하여이를 피하는 것입니다. 필자는이를 피하고 싶습니다. – AshesToAshes
질문이 왜 투표로 남았습니까? – AshesToAshes