用SQL查询不同价钱商品的售出数量
用SQL查询不同价位商品的售出数量
我有一表如下:
商品名 商品编码 商品价格 售出数量
饺子 01 8 2
馒头 02 2 6
拖把 03 89 1
茶杯 04 25 4
饺子 05 8 2
我想把商品价格分为0-10、10-20、20-30、40-50···90-100来查询不同价位的商品的售出数量。请问有没有语句可以得到如此的查询结果?
------解决思路----------------------
------解决思路----------------------
------解决思路----------------------
------解决思路----------------------
换一下形式而已
我有一表如下:
商品名 商品编码 商品价格 售出数量
饺子 01 8 2
馒头 02 2 6
拖把 03 89 1
茶杯 04 25 4
饺子 05 8 2
我想把商品价格分为0-10、10-20、20-30、40-50···90-100来查询不同价位的商品的售出数量。请问有没有语句可以得到如此的查询结果?
------解决思路----------------------
select
商品名,
sum(case when 商品价格 between 0 and 10 then 售出数量 else 0 end) ,
..........
from
tb
group by
商品名
------解决思路----------------------
SELECT 商品编码,商品名
,SUM(CASE WHEN 商品价格<=10 THEN 售出数量 ELSE 0 END)[0-10]
,SUM(CASE WHEN 商品价格<=20 AND 商品价格>10 THEN 售出数量 ELSE 0 END)[10-20]
,SUM(CASE WHEN 商品价格<=30 AND 商品价格>20 THEN 售出数量 ELSE 0 END)[20-30]
,SUM(CASE WHEN 商品价格<=40 AND 商品价格>30 THEN 售出数量 ELSE 0 END)[30-40]
,SUM(CASE WHEN 商品价格<=50 AND 商品价格>40 THEN 售出数量 ELSE 0 END)[40-50]
,SUM(CASE WHEN 商品价格<=60 AND 商品价格>50 THEN 售出数量 ELSE 0 END)[50-60]
,SUM(CASE WHEN 商品价格<=70 AND 商品价格>60 THEN 售出数量 ELSE 0 END)[60-70]
,SUM(CASE WHEN 商品价格<=80 AND 商品价格>70 THEN 售出数量 ELSE 0 END)[70-80]
,SUM(CASE WHEN 商品价格<=90 AND 商品价格>80 THEN 售出数量 ELSE 0 END)[80-90]
,SUM(CASE WHEN 商品价格<=100 AND 商品价格>90 THEN 售出数量 ELSE 0 END)[90-100]
FROM
TB
GROUP BY 商品编码,商品名
------解决思路----------------------
WITH table1(商品价格,售出数量) AS (
SELECT 8,2 UNION ALL
SELECT 2,6 UNION ALL
SELECT 89,1 UNION ALL
SELECT 25,4 UNION ALL
SELECT 8,2
)
,s AS (
SELECT 商品价格/10 AS g,
SUM(售出数量) AS 总售出数量
FROM table1
GROUP BY 商品价格/10
)
,n AS (
SELECT number AS g
FROM master..spt_values
WHERE type = 'p'
AND number < 10
)
SELECT '['+Convert(varchar(11),n.g*10)+'-'+Convert(varchar(11),n.g*10+10)+']' AS 价位,
s.总售出数量
FROM n
LEFT JOIN s
ON s.g = n.g
价位 总售出数量
------------------------- -----------
[0-10] 10
[10-20] NULL
[20-30] 4
[30-40] NULL
[40-50] NULL
[50-60] NULL
[60-70] NULL
[70-80] NULL
[80-90] 1
[90-100] NULL
------解决思路----------------------
换一下形式而已
SELECT '['+Convert(varchar(11),n.g*10)+'-'+Convert(varchar(11),n.g*10+10)+']' AS 价位,
s.总售出数量
FROM (
SELECT number AS g
FROM master..spt_values
WHERE type = 'p'
AND number < 10
) n
LEFT JOIN (
SELECT 商品价格/10 AS g,
SUM(售出数量) AS 总售出数量
FROM table1
GROUP BY 商品价格/10
) s
ON s.g = n.g