【问题标题】:MS SQL 2014 TSQL pulling 3 recordsMS SQL 2014 TSQL 提取 3 条记录
【发布时间】:2017-07-12 21:06:37
【问题描述】:

我正在尝试选择具有以下 3 个唯一 GUID 的 3 行:

  SELECT 
    number                                  AS 'ID #', 
    line                                    AS 'Line #', 
    network                                 AS Network,
    FORMAT(SUM(totalCost), N'c', 'en-US')   AS Total 
  FROM 
    theLine 
  WHERE 
    theGuid = '32e1319d-8842-4b98-9a66-c1e694417528' 
  AND 
    theGuid = '61e819a8-a37a-4105-aab0-e34df31d992d' 
  AND
    theGuid = '6675811d-9a32-4b62-a003-87344af03d6b' 
  GROUP BY 
    number, line, network

但是,当我运行此查询时,我没有得到任何记录。如果我只执行 1 WHERE 子句,那么我会得到与该 GUID 相关的记录,但再多则不会产生任何结果。

但我需要它做的是:

------------------------------------
|ID #  |Line # |Network |Total     |
------------------------------------
|1     |1      |USASV   |$5,000.00 |
|2     |1      |FJESC   |$4,920.00 |
|3     |1      |RTDEW   |$598.00   |

那么,我做错了什么?

【问题讨论】:

  • 使用或不使用此
  • 那是因为没有行中 theGuid 同时是所有三个值。对于这种类型的事情,您需要使用 IN。
  • Ugg 我想这会是小事@SeanLange

标签: sql sql-server tsql sql-server-2014


【解决方案1】:

同一行中不能有 3 个不同的值。将您的 AND 更改为 OR 或使用 IN 运算符。

  SELECT 
    number                                  AS 'ID #', 
    line                                    AS 'Line #', 
    network                                 AS Network,
    FORMAT(SUM(totalCost), N'c', 'en-US')   AS Total 
  FROM 
    theLine 
  WHERE 
    theGuid = '32e1319d-8842-4b98-9a66-c1e694417528' 
  OR
    theGuid = '61e819a8-a37a-4105-aab0-e34df31d992d' 
  OR
    theGuid = '6675811d-9a32-4b62-a003-87344af03d6b' 
  GROUP BY 
    number, line, network

或者:

  SELECT 
    number                                  AS 'ID #', 
    line                                    AS 'Line #', 
    network                                 AS Network,
    FORMAT(SUM(totalCost), N'c', 'en-US')   AS Total 
  FROM 
    theLine 
  WHERE 
    theGuid IN (
                '32e1319d-8842-4b98-9a66-c1e694417528',
                '61e819a8-a37a-4105-aab0-e34df31d992d',
                '6675811d-9a32-4b62-a003-87344af03d6b' 
               )
  GROUP BY 
    number, line, network

【讨论】:

  • 不错,佐哈尔。谢谢!
【解决方案2】:

在 WHERE 子句中使用 OR 而不是 AND

【讨论】:

  • 感谢瑞恩提供答案
【解决方案3】:

这是IN 的一个很好的示例用例,虽然我不确定你为什么有GROUP BY

SELECT 
    number                                  AS 'ID #', 
    line                                    AS 'Line #', 
    network                                 AS Network,
    FORMAT(SUM(totalCost), N'c', 'en-US')   AS Total 
 FROM 
    theLine 
 where theGuid in ('32e1319d-8842-4b98-9a66-c1e694417528','61e819a8-a37a-4105-aab0-e34df31d992d','6675811d-9a32-4b62-a003-87344af03d6b' )
GROUP BY 
number, line, network

【讨论】:

  • 感谢 scsimon 提供答案
  • 无汗兄弟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2012-12-14
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
相关资源
最近更新 更多