【问题标题】:How to do operations between a column and a subquery如何在列和子查询之间进行操作
【发布时间】:2021-07-29 19:11:44
【问题描述】:

我想知道如何在列和子查询之间进行操作,我想做的是将子查询Impuestos中获得的内容添加到字段Subtotal,以下是我的查询我正在使用这种情况。

Select 
RC.PURCHID;
LRC.VALUEMST as 'Subtotal',
                  isnull((
                    select sum((CONVERT(float, TD1.taxvalue)/100)*LRC1.VALUEMST ) as a
                           FROM TAXONITEM TOI1
                           inner join TAXDATA TD1 ON (TD1.TAXCODE = TOI1.TAXCODE and RC.DATAAREAID = TD1.DATAAREAID)
                           inner join TRANS LRC1 on (LRC1.VEND = RC.RECID)
                           WHERE TOI1.TAXITEMGROUP = PL.TAXITEMGROUP and RC.DATAAREAID = TOI1.DATAAREAID 
                    ), 0) Impuestos 
       from VEND RC  
             inner join VENDTABLE VTB on VTB.ACCOUNTNUM = RC.INVOICEACCOUNT
             inner join TRANS LRC on (LRC.VEND = RC.RECID)
             inner join PURCHLINE PL on (PL.LINENUMBER =LRC.LINENUM and PL.PURCHID =RC.PURCHID)
             where year (RC.DELIVERYDATE) =2021 and RC.PURCHASETYPE =3 order by RC.PURCHID;

希望有人在对子查询进行操作时能给我一些指导。

【问题讨论】:

  • 只是添加它们? ColumnName + (sub-query).

标签: sql sql-server tsql subquery


【解决方案1】:

一些不连贯的事实可能会有所帮助:

  • SELECT 语句只返回一行一列时,您可以将该语句括在括号中并将其用作纯值。在您的情况下,假设 select sum(......= TOI1.DATAAREAID 返回 500。那么,您的外部 select 的第二列相当于 isnull(500,0)

  • 您在问题“子查询 Impuestos”中提到。请记住,尽管您确实使用了我们前面提到的子查询,但当它被括在括号中时,它并没有被视为子查询(更准确地说:派生表),而是作为一个值。因此,“Impuestos”此时只是一个列别名

  • 我不喜欢并避免在from 之前使用子查询,这会使事情变得更难阅读。这是apply 的解决方案,它将使您的代码基本保持不变:

    Select 
        RC.PURCHID,
        LRC.VALUEMST as 'Subtotal',
        isnull(subquery1.a, 0) as Impuestos 
    from VEND RC  
         inner join VENDTABLE VTB on VTB.ACCOUNTNUM = RC.INVOICEACCOUNT
         inner join TRANS LRC on (LRC.VEND = RC.RECID)
         inner join PURCHLINE PL on (PL.LINENUMBER =LRC.LINENUM and PL.PURCHID =RC.PURCHID)
         outer apply
         (
            select sum((CONVERT(float, TD1.taxvalue)/100)*LRC1.VALUEMST ) as a
            FROM TAXONITEM TOI1
            inner join TAXDATA TD1 ON (TD1.TAXCODE = TOI1.TAXCODE and RC.DATAAREAID = TD1.DATAAREAID)
            inner join TRANS LRC1 on (LRC1.VEND = RC.RECID)
            WHERE TOI1.TAXITEMGROUP = PL.TAXITEMGROUP and RC.DATAAREAID = TOI1.DATAAREAID 
         ) as subquery1
    where year (RC.DELIVERYDATE) =2021 and RC.PURCHASETYPE =3 order by RC.PURCHID;

【讨论】:

    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2022-01-02
    • 2014-01-14
    相关资源
    最近更新 更多