sql - 结合 2 个复杂的查询

标签 sql sql-server select union

首先,我无法提供 SQL Fiddle,因为要重新创建数据真的很复杂。我将尝试尽可能清楚地呈现查询、输出和问题。
我有一个看起来像这样的查询:

with cte(MainArt,secondaryArt, Quantity) as(
SELECT t_mitm, t_sitm, t_qana
            FROM ttibom010201 
        WHERE TRIM(t_mitm) = 'ACL-4812070395-4'
union all
select 
ttibom010201.t_mitm, ttibom010201.t_sitm, ttibom010201.t_qana
from ttibom010201 inner join cte on cte.secondaryArt=ttibom010201.t_mitm
        )
select    cte.* ,dsc.t_cuni, dsc.t_dsca from cte
left join ttcibd001201 dsc on dsc.t_item = cte.secondaryArt 
where TRIM(secondaryArt)  like N'30%'
这个确切的查询返回了这 4 行:
enter image description here
从不同的表我使用这个 secondArt 获取一些信息的值(value):
select top 1 t_orno, t_item,t_pric from ttdpur401201 where t_item like '%30102024%' order by  t_ddte desc
结果是:
enter image description here
正如您所看到的 t_item 和 secondaryArt 是相同的(第一个查询的第 3 行和第 4 行)。所以我希望能够以某种方式将这 2 个查询合并为 1 个。在第一个表中,我只需要添加这个 t_价格 .
如何合并这两个查询?

最佳答案

两个查询之间的左连接就可以解决问题。

  with cte(MainArt,secondaryArt, Quantity) as(
SELECT t_mitm, t_sitm, t_qana
            FROM ttibom010201 
        WHERE TRIM(t_mitm) = 'ACL-4812070395-4'
union all
select 
ttibom010201.t_mitm, ttibom010201.t_sitm, ttibom010201.t_qana
from ttibom010201 inner join cte on cte.secondaryArt=ttibom010201.t_mitm
        )
select    cte.* ,dsc.t_cuni, dsc.t_dsca, t_pric from cte
left join ttcibd001201 dsc on dsc.t_item = cte.secondaryArt 
Left join (select  t_orno, t_item,t_pric from ttdpur401201 inner join cte on t_item like cte.secondaryArt order by  t_ddte desc) t
on cte.secondaryArt = t.t_item
where TRIM(secondaryArt)  like N'30%'
新修改的答案:
with cte(MainArt,secondaryArt, Quantity) as(
SELECT t_mitm, t_sitm, t_qana
            FROM ttibom010201 
        WHERE TRIM(t_mitm) = 'ACL-4812070395-4'
union all
select 
ttibom010201.t_mitm, ttibom010201.t_sitm, ttibom010201.t_qana
from ttibom010201 inner join cte on cte.secondaryArt=ttibom010201.t_mitm
        )
select    cte.* ,dsc.t_cuni, dsc.t_dsca, t_pric from cte
left join ttcibd001201 dsc on dsc.t_item = cte.secondaryArt 
Left join (select top 1 t_orno, t_item,t_pric,row_number()over(partition by t_item order by t_ddte desc) rnfrom ttdpur401201 ) t
on t.t_item like cte.secondaryArt  and t.rn=1
where TRIM(secondaryArt)  like N'30%'

关于sql - 结合 2 个复杂的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66669887/

相关文章:

mysql - 从表中选择两个不同的列

sql - 如果列 x 是重复记录,则合并列 a、b、c - SQL

java - 在 Spring 3 jUnit 测试的语句中找不到 HSQLDB 表

sql - 如何进行一对一的左外连接?

sql - 甲骨文 : 2 column names for a single column

sql-server - 如何更改数据库所有列的排序规则?

c# - Visual Studio 2013 中 C# 应用程序的数据库

sql-server - 删除带有特殊字符的表名

Mysql 选择最大连续记录(有间隙)

需要mysql查询INDEX吗?