2017-05-30 137 views
0

提前对不起,如果我的问题重复或类似于另一个,我已经检查了另一个类似这样的帖子,但我不明白。所以,这是我的问题。我有接下来的两个选择语句,并且我无法正确地将第二个查询放在第一个查询中,我尝试在连接之后放入select中,并且如果可以帮助我,给予和建议,它会很棒。SQL Server。合并两个select语句,每个内部连接

select distinct 
    movements.date, movements.productcode, 
    products.productname, 
    clasification.family, 
    clients.clientname, clients.clientcode, 
    movements.quantity, movements.price, 
    movements.credit, movements.total, 
    movements.exchange, movements.state, movements.city 
from 
    invoices.movements 
inner join 
    invoices.products on invoices.movements.idproduct = invoices.products.idproduct 
left outer join 
    invoices.documents on invoices.movements.iddocument = invoices.documents.iddocument 
inner join 
    invoices.coins on invoices.documents.idcoin = invoices.coins.idcoin 
inner join 
    invoices.address on invoices.address.iddocument = invoices.documents.iddocument 
inner join 
    invoices.clasifications on invoices.clasifications.family = 'aspen' 
inner join 
    invoices.clients on invoices.documents.idclient = invoices.clients.idclient 

这是结果我从这个查询获得:

+----+------------+------------+-----------+-----------+-----------------+--------+----------+------+-----+--------+-----+----+ 
|date|product_code|product_name|client_name|client_code|invoice_reference|quantity|unit_price|credit|total|exchange|state|city| 
+----+------------+------------+-----------+-----------+-----------------+--------+----------+------+-----+--------+-----+----+ 

但我也想添加两列,一个用于客户端的clasification,在那里我可以得到,如果客户端是决赛用户,安装程序,生产者,等等,这是查询给了我。

select 
    invoices.classifications.classification_value, 
    client_name, client_code 
from 
    invoices.clients 
inner join 
    invoices.classifications on invoices.classifications.cid_classification = invoices.clients.cid_clasifclient1 
inner join 
    invoices.documents on invoices.documents.cid_client = invoices.clients.cid_client 

,第二列是发票系列,我需要合并到列进一个,但是当我把它添加到第一个查询不返回任何值。

select 
    convert(varchar(20), documents_series) + '' + 
     convert(varchar(6), document_number) as invoice_series 
from 
    invoices.documents 

所以我真的很喜欢,如果你能帮助我,抱歉,如果我不是很好的广告SQL。

+0

这是相当痛苦的看到剧本,但会得心应手看到的结构,但我最初可以建议使用APPLY ...外部应用(类似于外部联接)或交叉应用(类似于内部联接) – maSTAShuFu

回答

0

因为它似乎是承上启下的是客户表主要idclientcid_client领域暗示一个主/外键对(或一个一对多连接表),请考虑使用最后一次查询,之间第一个查询中的派生表加入这两个字段。另外,尝试使用table aliases如下图所示,以减少repetitiously长表名:

select distinct m.date, m.productcode, p.productname 
     , f.family, cl.clientname, cl.clientcode 
     , m.quantity, m.price, m.credit, m.total 
     , m.exchange,m.state, m.city 
     , sub.clasification_value, sub.invoice_series 

from invoices.movements m  
inner join invoices.products p 
    on m.idproduct = p.idproduct 
left outer join invoices.documents d 
    on m.iddocument = d.iddocument 
inner join invoices.coins c 
    on d.idcoin = c.idcoin 
inner join invoices.address a 
    on a.iddocument = d.iddocument 
inner join invoices.clasifications f 
    on f.family='aspen' 
inner join invoices.clients cl 
    on d.idclient = cl.idclient 

inner join 
    (select subcl.idclient, subf.clasification_value 
      , subcl.client_name, subcl.client_code 
      , convert(varchar(20), subd.documents_series)+''+ 
      convert(varchar(6), subd.document_number) as invoice_series 
    from invoices.clients subcl 
    inner join invoices.clasifications subf 
     on subf.cid_clasification = cl.cid_clasifclient1 
    inner join invoices.documents subd 
     on subd.cid_client = cl.cid_client) As sub 

    on sub.idclient = cl.idclient 

或者有CTE,而不是派生表:

with sub as 
(
    select subcl.idclient, subf.clasification_value 
     , subcl.client_name, subcl.client_code 
     , convert(varchar(20), subd.documents_series)+''+ 
      convert(varchar(6), subd.document_number) as invoice_series 
    from invoices.clients subcl 
    inner join invoices.clasifications subf 
    on subf.cid_clasification = cl.cid_clasifclient1 
    inner join invoices.documents subd 
    on subd.cid_client = cl.cid_client 
) 

select distinct m.date, m.productcode, p.productname 
     , f.family, cl.clientname, cl.clientcode 
     , m.quantity, m.price, m.credit, m.total 
     , m.exchange,m.state, m.city 
     , sub.clasification_value, sub.invoice_series 

from invoices.movements m  
inner join invoices.products p 
    on m.idproduct = p.idproduct 
left outer join invoices.documents d 
    on m.iddocument = d.iddocument 
inner join invoices.coins c 
    on d.idcoin = c.idcoin 
inner join invoices.address a 
    on a.iddocument = d.iddocument 
inner join invoices.clasifications f 
    on f.family='aspen' 
inner join invoices.clients cl 
    on d.idclient = cl.idclient 
inner join sub 
    on sub.idclient = cl.idclient 
+0

非常感谢您的帮助(:这解决了我的问题。c: –