【发布时间】:2019-09-16 09:07:15
【问题描述】:
我正在尝试从我创建的临时表中选择 4 列,我正在努力让其中一列显示其数据。
我已经以不同的方式编写了语句以尝试获取正确的数据,但是需要一个联合才能从第二个表中减去数量
Create table #temp110
(
ItemCode nvarchar(50),
[Quantity 6 months ago] int
)
Create table #temp6to12
(
ItemCode nvarchar(50),
[Quantity 6 to 12 Months Ago] int
)
GO
select top 20
oi.[Itemcode],
sum(qu.[Quantity]) as [Quantity 6 months ago]
into #temp110
from miro.dbo.oitm oi
join miro.dbo.qut1 qu on oi.ItemCode = qu.ItemCode
WHERE DATEDIFF( MONTH, qu.docdate, GETDATE()) < 64
group by oi.[Itemcode], qu.Quantity
order by qu.quantity DESC
-- qty of itms between 6 & 12 months back, lowest 10 !!All Items
select top 20
oi.[Itemcode],
sum(qu.[Quantity]) as [Quantity 6 to 12 Months Ago]
into #temp6to12
from miro.dbo.oitm oi
join miro.dbo.qut1 qu on oi.ItemCode = qu.ItemCode
WHERE DATEDIFF( MONTH, qu.docdate, GETDATE()) > 6
and DATEDIFF( MONTH, qu.docdate, GETDATE()) < 12
group by oi.[Itemcode], qu.Quantity
order by qu.quantity DESC
SELECT
UN.ItemCode,
UN.[Quantity 6 To 12 Months Ago],
UN.[Quantity Differance]
FROM(
select
t1.Itemcode,
t1.[Quantity 6 to 12 Months Ago],
t1.[Quantity 6 To 12 Months Ago] as [Quantity Differance]
from #temp6to12 t1
join #temp110 t2 on t1.[ItemCode] = t2.[ItemCode]
UNION
select
t2.Itemcode,
t2.[Quantity 6 months ago],
- t2.[Quantity 6 Months Ago] as [Quantity Differance]
from #temp110 t1
join #temp110 t2 on t1.[ItemCode] = t2.[ItemCode]
) as Un
order by un.[Quantity Differance] ASC
目前此代码有效,但未显示 [6个月前的数量],这是我最终需要的。
如果我尝试像使用 [Quantity 6 to 12 Months A] 那样从 Union 中调用它,它不会收到它,我怀疑这是因为 [Quantity 6 to 12 Months Ao] 用于从 [数量6个月前]在联盟。 它在数学上使用的事实意味着我不能从联合中调用它?
希望能够将 UN.[Quantity 6 months ago] 添加到 select 语句中
【问题讨论】:
-
看来你想显示两列,并在
WHERE子句中使用条件聚合 -
您正在选择两个不同时间段的前 20 个项目。然后你内心加入他们。此联接仅适用于两个时期都在前 20 名中的项目。否则你需要一个完整的外部连接。
-
顺便说一句:
group by oi.[Itemcode], qu.Quantity?您不想要前 20 名的商品,而是前 20 名的单件数量?这似乎不太可能。它还会使sum(qu.[Quantity])变得很奇怪,因为您会查找某个项目的数量出现的频率。我想你想要group by oi.Itemcode和order by sum(qu.quantity) desc。 -
您好,托尔斯滕。您对 order/group by 以及 join 的看法是正确的,我感谢您帮助我思考这个问题。我想我需要重写大部分代码
标签: sql sql-server tsql union