Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查找不使用';您在SQL Server 2014中没有价值吗?_Sql_Sql Server - Fatal编程技术网

如何查找不使用';您在SQL Server 2014中没有价值吗?

如何查找不使用';您在SQL Server 2014中没有价值吗?,sql,sql-server,Sql,Sql Server,我有一个“FinTrans”表,其中包含如下数据: --------------------------------- |AcctID |TransCode |TransAmt| --------------------------------- |1234567 |TOLL | 4:30| --------------------------------- |1234567 |PYMT | 5:30| --------------------

我有一个“FinTrans”表,其中包含如下数据:

---------------------------------
|AcctID     |TransCode |TransAmt|
---------------------------------
|1234567    |TOLL      |    4:30|
---------------------------------
|1234567    |PYMT      |    5:30|
---------------------------------
|1234567    |RFND      |    1:00|
---------------------------------
|2345678    |TOLL      |    4:30|
---------------------------------
|2345678    |TOLL      |    4:30|
---------------------------------
|2345678    |RFND      |    4:30|
---------------------------------
|3456789    |TOLL      |    4:30|
---------------------------------
我有一个“账户”表,它给出了每个账户的账号

我需要找到没有“PYMT”作为转码的帐号

我已经尝试了下面的代码,但显然不起作用

SELECT DISTINCT(A.AccountNumber)      
      ,TransCode
      ,SUM(TransAmt)

  FROM FinTrans F
  INNER JOIN Account A ON F.AcctID = A.AccountID

  WHERE TransCode = 'TOLL'
    AND TransCode != 'PYMT'

  GROUP BY A.AccountNumber, TransCode

我需要找到没有“PYMT”作为转码的帐号

你可以试试这个。。。通过拥有来使用组

SELECT A.AccountNumber
      ,TransCode
      ,SUM(TransAmt)

  FROM FinTrans F
  INNER JOIN Account A ON F.AcctID = A.AccountID
  where TransCode IN ('PYMT', 'TOLL')
  GROUP BY A.AccountNumber, TransCode
  HAVING SUM(IIF(TransCode = 'PYMT',1,0)) = 0

我需要找到没有“PYMT”作为转码的帐号

你可以试试这个。。。通过拥有来使用组

SELECT A.AccountNumber
      ,TransCode
      ,SUM(TransAmt)

  FROM FinTrans F
  INNER JOIN Account A ON F.AcctID = A.AccountID
  where TransCode IN ('PYMT', 'TOLL')
  GROUP BY A.AccountNumber, TransCode
  HAVING SUM(IIF(TransCode = 'PYMT',1,0)) = 0

我认为这是做
没有
的正常方式:

SELECT AccountNumber
FROM Account AS a
WHERE NOT EXISTS (
      SELECT NULL FROM FinTrans AS f
      WHERE a.AccountID = f.AcctID AND
            f.TransCode = "PYMT")
试着解释一下你的例子,我相信你在寻找

SELECT a.AccountNumber, f.TransCode, SUM(f.TransAmt)
FROM FinTrans AS f
INNER JOIN Account AS a ON f.AcctID = a.AccountID
WHERE f.AcctID IN (SELECT f.AcctID FROM FinTrans AS F GROUP BY f.AcctID 
                   HAVING SUM(CASE WHEN f.TransCode = 'PYMT' THEN 1 ELSE 0 END) = 0)
      AND f.TransCode = 'TOLL'
GROUP BY f.AcctID
使用过滤组的第一种方法的另一个选项是

SELECT a.AccountNumber, f.TransCode, SUM(f.TransAmt)
FROM FinTrans AS f
INNER JOIN Account AS a ON f.AcctID = a.AccountID
WHERE f.AcctID IN (SELECT AcctID FROM FinTrans AS f 
                   WHERE NOT EXISTS (SELECT NULL FROM FinTrans AS f2
                                     WHERE f.AcctID = f2.AcctID AND f2.TransCode = "PYMT"))
                         AND f.TransCode = 'TOLL'
GROUP BY f.AcctID;

我认为这是做
没有
的正常方式:

SELECT AccountNumber
FROM Account AS a
WHERE NOT EXISTS (
      SELECT NULL FROM FinTrans AS f
      WHERE a.AccountID = f.AcctID AND
            f.TransCode = "PYMT")
试着解释一下你的例子,我相信你在寻找

SELECT a.AccountNumber, f.TransCode, SUM(f.TransAmt)
FROM FinTrans AS f
INNER JOIN Account AS a ON f.AcctID = a.AccountID
WHERE f.AcctID IN (SELECT f.AcctID FROM FinTrans AS F GROUP BY f.AcctID 
                   HAVING SUM(CASE WHEN f.TransCode = 'PYMT' THEN 1 ELSE 0 END) = 0)
      AND f.TransCode = 'TOLL'
GROUP BY f.AcctID
使用过滤组的第一种方法的另一个选项是

SELECT a.AccountNumber, f.TransCode, SUM(f.TransAmt)
FROM FinTrans AS f
INNER JOIN Account AS a ON f.AcctID = a.AccountID
WHERE f.AcctID IN (SELECT AcctID FROM FinTrans AS f 
                   WHERE NOT EXISTS (SELECT NULL FROM FinTrans AS f2
                                     WHERE f.AcctID = f2.AcctID AND f2.TransCode = "PYMT"))
                         AND f.TransCode = 'TOLL'
GROUP BY f.AcctID;

您可以使用
分组方式
拥有

SELECT A.AccountNumber
FROM FinTrans F INNER JOIN
     Account A
     ON F.AcctID = A.AccountID
WHERE TransCode IN ('PYMT', 'TOLL')
GROUP BY A.AccountNumber
HAVING SUM(CASE WHEN TransCode = 'PYMT' THEN 1 ELSE 0 END) = 0;
您真的需要示例SQL中的其他列吗?它们与你的问题无关

您也可以使用
存在
/
不存在

select a.*
from account a
where exists (select 1
              from FinTrans f
              where f.AcctID = a.AccountID and f.TransCode = 'TOLL'
             ) and
      not exists (select 1
                  from FinTrans f
                  where f.AcctID = a.AccountID and f.TransCode = 'PYMT'
                 );

这具有无需聚合的性能优势。

您可以使用
分组方式
拥有

SELECT A.AccountNumber
FROM FinTrans F INNER JOIN
     Account A
     ON F.AcctID = A.AccountID
WHERE TransCode IN ('PYMT', 'TOLL')
GROUP BY A.AccountNumber
HAVING SUM(CASE WHEN TransCode = 'PYMT' THEN 1 ELSE 0 END) = 0;
您真的需要示例SQL中的其他列吗?它们与你的问题无关

您也可以使用
存在
/
不存在

select a.*
from account a
where exists (select 1
              from FinTrans f
              where f.AcctID = a.AccountID and f.TransCode = 'TOLL'
             ) and
      not exists (select 1
                  from FinTrans f
                  where f.AcctID = a.AccountID and f.TransCode = 'PYMT'
                 );

这具有无需聚合的性能优势。

查询中有两个表,但只显示一个表。预期结果是什么?转码是哪个表的一部分?如图所示。表2\u账户,账户编号。TransCode用于表1“FinTrans”。查询中有两个表。但只显示一个表。预期结果是什么?转码是哪个表的一部分?如图所示。表2\u账户,账户编号。转码是针对表1“FinTrans”的。所以,就像我的条件指定的那样,我想要所有具有TOLL但不具有PYMT的AccountNumber。代码是什么?在你的问题中你肯定不会这么说。所以,就像我的条件指定的那样,我想要所有有通行费但没有PYMT的帐号。代码是什么?在你的问题中你肯定不会这么说。所以,就像我的条件指定的那样,我想要所有有通行费但没有PYMT的帐号。代码是什么?我想你的条件说明了我需要找到没有“PYMT”作为转码的帐号,而不要说通行费?在任何情况下,我认为我的更新都是您想要的。因此,正如我的条件所指定的,我想要所有具有TOLL但不具有PYMT的帐号。代码是什么?我想你的条件说明了我需要找到没有“PYMT”作为转码的帐号,而不要说通行费?在任何情况下,我认为我的更新都是您想要的。您以前的代码中有一条错误消息:在预期条件的上下文中,在“;”附近指定了一个非布尔类型的表达式。您以前的代码中出现错误消息:在“;”附近预期条件的上下文中指定的非布尔类型表达式。