【问题标题】:How to select a Column from inside a Union如何从联合中选择一列
【发布时间】: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.Itemcodeorder by sum(qu.quantity) desc
  • 您好,托尔斯滕。您对 order/group by 以及 join 的看法是正确的,我感谢您帮助我思考这个问题。我想我需要重写大部分代码

标签: sql sql-server tsql union


【解决方案1】:

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

通过使用UNION ALL,您可以强制它保留两个结果,即使它们相同。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多