首页 > 解决方案 > 如何从联合中选择一列

问题描述

我正在尝试从我创建的临时表中选择 4 列,我正在努力让其中一列显示其数据。

我已经以不同的方式编写了语句以尝试获取正确的数据,但是需要一个 Union 才能从第二个表中减去 Quantity


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


目前此代码有效,但是它没有显示 [Quantity 6 months ago] 的值,这是我最终需要的。

如果我尝试像使用 [Quantity 6 to 12 Months Ago] 那样从 Union 中调用它,它没有接起来,我怀疑这是因为 [Quantity 6 to 12 Months Ago] 用于从 [Quantity 6 个月前] 中减去前]在联盟。它在数学上使用的事实意味着我不能从联盟中调用它?

期望能够在 select 语句中添加 UN.[Quantity 6 months ago]

标签: sqlsql-servertsqlunion

解决方案


请注意,当您使用UNION它时,它会相互评估结果,忽略任何重复项。在您的代码中,您似乎没有任何信息表明数量是来自第一部分还是第二部分。

通过使用UNION ALL你强制它保持两个结果,即使它们是相同的。

或者,您可以使用某种指示符(例如字符串/文本)来指示数量是否与 6 个月或 6-12 个月相关。


推荐阅读