[英]Grouping multiple selects within a SQL query
I have a table Supplier with two columns, TotalStock and Date. 我有一个供应商,有两列,TotalStock和Date。 I'm trying to write a single query that will give me stock totals by week / month / year for a list of suppliers.
我正在尝试编写一个单独的查询,它将按周/月/年为库存总数提供供应商列表。
So results will look like this.. 所以结果看起来像这样......
SUPPLIER WEEK MONTH YEAR
SupplierA 50 100 2000
SupplierB 60 150 2500
SupplierC 15 25 200
So far I've been playing around with multiple selects but I can't get any further than this: 到目前为止,我一直在玩多个选择,但我不能比这更进一步:
SELECT Supplier,
(
SELECT Sum(TotalStock)
FROM StockBreakdown
WHERE Date >= '2014-5-12'
GROUP BY Supplier
) AS StockThisWeek,
(
SELECT Sum(TotalStock)
FROM StockBreakdown
WHERE Date >= '2014-5-1'
GROUP BY Supplier
) AS StockThisMonth,
(
SELECT Sum(TotalStock)
FROM StockBreakdown
WHERE Date >= '2014-1-1'
GROUP BY Supplier
) AS StockThisYear
This query throws an error as each individual grouping returns multiple results. 当每个单独的分组返回多个结果时,此查询会引发错误。 I feel that I'm close to the solution but can't work out where to go
我觉得我很接近解决方案,但无法解决问题
You don't have to use subqueries to achieve what you want : 您不必使用子查询来实现您想要的:
SELECT Supplier
, SUM(CASE WHEN Date >= CAST('2014-05-12' as DATE) THEN TotalStock END) AS StockThisWeek
, SUM(CASE WHEN Date >= CAST('2014-05-01' as DATE) THEN TotalStock END) AS StockThisMonth
, SUM(CASE WHEN Date >= CAST('2014-01-01' as DATE) THEN TotalStock END) AS StockThisYear
FROM StockBreakdown
GROUP BY Supplier
You may need to make the selects for the columns return only a single result. 您可能需要使列的选择仅返回单个结果。 You could try this (not tested currently):
你可以尝试这个(目前未测试):
SELECT Supplier,
(
SELECT TOP 1 StockThisWeek FROM
(
SELECT Supplier, Sum(TotalStock) AS StockThisWeek
FROM StockBreakdown
WHERE Date >= '2014-5-12'
GROUP BY Supplier
) tmp1
WHERE tmp1.Supplier = Supplier
) AS StockThisWeek,
(
SELECT TOP 1 StockThisMonth FROM
(
SELECT Supplier, Sum(TotalStock) AS StockThisMonth
FROM StockBreakdown
WHERE Date >= '2014-5-1'
GROUP BY Supplier
) tmp2
WHERE tmp2.Supplier = Supplier
) AS StockThisMonth,
...
This selects the supplier and then tries to create two columns StockThisWeek
and StockThisMonth
by selecting the first entry from the select you created before. 这将选择供应商,然后通过从之前创建的选择中选择第一个条目,尝试创建两列
StockThisWeek
和StockThisMonth
。 As through the GROUP BY
there should only be one entry per supplier, so you don't lose and data. 通过
GROUP BY
,每个供应商应该只有一个条目,因此您不会丢失和数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.