난 정말 SQL Server의 피벗 테이블에 대해 물어보고 싶어요. 구조가 이와 같은 경우 쿼리를 수행하려고합니다.피벗 테이블 합계 날짜 사이에
DECLARE @cols AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
DECLARE @tanggal_awal date
DECLARE @tanggal_akhir date
DECLARE @print nvarchar(MAX)
CREATE TABLE #datatable
(
product_id int,
product_date date,
product_ammount int
)
SET @tanggal_awal = convert(date,'02-01-2017')
SET @tanggal_akhir = convert(date,'02-27-2017')
insert into #datatable (product_id,product_date,product_ammount) VALUES
(1,getdate(),100),
(1,getdate(),900),
(2,dateadd(DD,-1,getdate()),400),
(3,DATEADD(DD,4,getdate()),300),
(1,dateadd(DD,4,getdate()),200),
(2,dateadd(DD,2,getdate()),700),
(4,dateadd(DD,-3,getdate()),1000)
--SELECT * FROM @datatable
;WITH CTE (datelist,maxdate) AS
(
select min(@tanggal_awal) datelist, max(product_date) maxdate
from #datatable
union all
select dateadd(dd, 1, datelist), @tanggal_akhir
from cte
where datelist < maxdate
) SELECT c.datelist
into #temp
from cte c
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(CHAR(10), datelist, 120))
from #temp
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
--SELECT d.datelist, b.product_id, SUM(b.product_ammount)
-- FROM #temp d left join #datatable b on
-- d.datelist between @tanggal_awal and @tanggal_akhir
-- AND d.datelist = b.product_date
-- GROUP BY b.product_id, d.datelist
--select b.product_id, d.datelist,
-- sum(b.product_ammount) PivotDate
-- from #datatable b
-- left join #temp d
-- on d.datelist between @tanggal_awal and @tanggal_akhir
-- and d.datelist = b.product_date
--group by b.product_id, d.datelist
--order by b.product_id
SET @query = 'SELECT product_id, '[email protected]+' FROM
(
select b.product_id, d.datelist, convert(CHAR(10), datelist, 120) PivotDate
from #datatable b
left join #temp d
on d.datelist between @tanggal_awal and @tanggal_akhir
and d.datelist = b.product_date
) x
pivot
(
count(datelist)
for PivotDate in (' [email protected]+ ')
) p'
EXECUTE sp_executesql @query ,N'@tanggal_awal DATE, @tanggal_akhir DATE', @tanggal_awal,@tanggal_akhir
GO
drop table #temp
go
drop table #datatable
이 쿼리의 결과는 대부분 해당 날짜의 'product_id'입니다. 그러나, 나는이 같은 product_ammount를 기반으로 합계의 합계를 얻고 싶습니다.
-------------------------------------
|product_id| 2017-01-02 | 2017-02-02|
-------------------------------------
|1 | 0 | 1000 |
-------------------------------------
|2 | 900 | 0 |
-------------------------------------
|3 | 700 | 0 |
-------------------------------------
아무에게도이 경우 특히 조인과 피벗을 함께 처리하는 가장 좋은 방법을 제공 할 수 있습니까? 고마워요.
- 업데이트 Shakeer Mirza에서 쿼리 한 결과는 다음과 같습니다.
우리 그룹이 할 수있는?
그것은 작동합니다 :), 정말 고마워.하지만 결과는 정말 좋지 않아. –
환영합니다 :) @FarisFajar –
@mirza, 결과가 그룹화되지 않았으므로 그룹화하는 방법은 무엇입니까? –