【问题标题】:sql inner join on blank table [closed]空白表上的sql内部联接[关闭]
【发布时间】:2015-10-08 19:20:54
【问题描述】:

我对简单的事情有一个复杂的查询,但我设法让它工作。 idclient 为 1 时查询有效,但 idclient 为 5 时出现问题。

问题是那个客户没有订购任何东西,他只是支付了一些金额。所以没有a.price,实际上整个表都是空白的,我想要-1200,00这样的结果或减去的支付金额。我的问题是表的第一部分不存在,所以内部连接是不可能的,第二部分也不存在。对“快速修复”有什么建议吗? :)

SELECT SUM(a.price) - s.pay AS Remain 
FROM   (SELECT name, 
               ( quantity * itprice ) * ( 100 - percent ) / 100 AS price, 
               idclient 
        FROM   (SELECT order.iditem     AS ID, 
                       item.name, 
                       SUM(order.quant) AS quantity, 
                       order.percent, 
                       item.itprice, 
                       order.idclient 
                FROM   item 
                       inner join order 
                               ON order.iditem = item.id 
                WHERE  ( order.idclient = 1 ) 
                GROUP  BY order.iditem, 
                          order.percent, 
                          item.name, 
                          item.itprice, 
                          order.idclient) AS X) AS a 
       inner join (SELECT SUM(amount) AS Pay, 
                          idcom 
                   FROM   payed 
                   WHERE  ( idcom = 1 ) 
                   GROUP  BY idcom) AS s 
               ON a.idclient = s.idcom 
GROUP  BY s.idcom, 
          a.idclient, 
          s.pay 

(代码中可能有一些输入错误,但请不要打扰,因为我已经翻译了我的原始代码,所以可能在翻译中丢失了一些字母。代码是正确的)

【问题讨论】:

  • 请使用示例数据和所需结果编辑您的问题。可能有一种更简单的方法来表达您想要做的事情。 SQL Fiddle 也是一个好主意。
  • 示例:某人订购了 15 个苹果(有价格和折扣等),a.price 计算最终价格。同一个人支付 100、200、500 和 s.pay 总和。这两者之间的区别是我想要展示的。问题是当有人不订购任何东西,而只是支付一些金额。那么他的表就不存在了。而我的最终结果是一张空白表。我想成为 - 支付现金金额。

标签: c# sql sql-server join inner-join


【解决方案1】:

这总是只取一行吗?至少它看起来像这样,如果是这样的话,你可以像这样使用变量:

declare @price decimal(10,2) = 0, @payment decimal(10,2) = 0

SELECT 
    @price = SUM(order.quant * item.itprice ) * ( 100 - order.percent ) / 100)
FROM
    item 
    inner join order 
        ON order.iditem = item.id 
WHERE
    order.idclient = 1 

SELECT 
    @payment = SUM(amount)
FROM   
    payed 
WHERE
    idcom = 1

select @price - @payment

【讨论】:

  • 伙计,你是天才,我什至没有尝试使用变量。这要容易得多。最后仍然需要使用 isnull(@Price,0) ,但现在它正在工作。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2018-04-08
  • 2015-02-28
  • 2012-09-01
  • 1970-01-01
  • 2013-02-08
相关资源
最近更新 更多