Cel*_*l-o 0 sql-server group-by
我在前 6 个月内一直在拉动总库存。如何在同一查询中提取过去 6 个月内的总库存?
另外我想要查询的结果如下所示:
Stock Code | the first 6 months | the second 6 months etc.
Run Code Online (Sandbox Code Playgroud)
我的 SQL 查询:
SELECT TOP (100) PERCENT STOK_KODU,
COALESCE (SUM(CASE WHEN kod1 = 'G' THEN kod2 ELSE 0 END), 0)
- COALESCE (SUM(CASE WHEN kod1 = 'C' THEN kod2 ELSE 0 END), 0) AS StokToplam1
FROM s_hareket WHERE (STOK_KODU BETWEEN '01001' AND '75000')
and (tarih BETWEEN '2011-01-01' and '2011-06-30')
GROUP BY STOK_KODU
ORDER BY STOK_KODU
Run Code Online (Sandbox Code Playgroud)
小智 7
您应该可以使用 dateadd 和 getdate 函数来做到这一点:
SELECT TOP ( 100 ) PERCENT
STOK_KODU ,
COALESCE(SUM(CASE WHEN kod1 = 'G' THEN kod2
ELSE 0
END), 0) - COALESCE(SUM(CASE WHEN kod1 = 'C' THEN kod2
ELSE 0
END), 0) AS StokToplam1
FROM s_hareket
WHERE ( STOK_KODU BETWEEN '01001' AND '75000' )
AND ( tarih BETWEEN dateadd(month,-6,GETDATE()) AND GETDATE() )
GROUP BY STOK_KODU
ORDER BY STOK_KODU
Run Code Online (Sandbox Code Playgroud)
如果我正确理解您的问题,您希望合并结果,然后对其进行旋转。这导致以下查询:
SELECT * FROM
(SELECT TOP ( 100 ) PERCENT
'last' AS t,
STOK_KODU ,
COALESCE(SUM(CASE WHEN kod1 = 'G' THEN kod2
ELSE 0
END), 0) - COALESCE(SUM(CASE WHEN kod1 = 'C' THEN kod2
ELSE 0
END), 0) AS StokToplam1
FROM s_hareket
WHERE ( STOK_KODU BETWEEN '01001' AND '75000' )
AND ( tarih BETWEEN dateadd(month,-6,GETDATE()) AND GETDATE() )
GROUP BY STOK_KODU
ORDER BY STOK_KODU
UNION ALL
SELECT TOP ( 100 ) PERCENT
'first' AS t,
STOK_KODU ,
COALESCE(SUM(CASE WHEN kod1 = 'G' THEN kod2
ELSE 0
END), 0) - COALESCE(SUM(CASE WHEN kod1 = 'C' THEN kod2
ELSE 0
END), 0) AS StokToplam1
FROM s_hareket
WHERE ( STOK_KODU BETWEEN '01001' AND '75000' )
AND ( tarih BETWEEN '2011-01-01' and '2011-06-30' )
GROUP BY STOK_KODU
ORDER BY STOK_KODU) AS sourceTable
PIVOT (
SUM(StokToplam1)
FOR T IN ([first], [last])
) AS p
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
197 次 |
最近记录: |