如何查找不使用';您在SQL Server 2014中没有价值吗?
我有一个“FinTrans”表,其中包含如下数据:如何查找不使用';您在SQL Server 2014中没有价值吗?,sql,sql-server,Sql,Sql Server,我有一个“FinTrans”表,其中包含如下数据: --------------------------------- |AcctID |TransCode |TransAmt| --------------------------------- |1234567 |TOLL | 4:30| --------------------------------- |1234567 |PYMT | 5:30| --------------------
---------------------------------
|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”作为转码的帐号,而不要说通行费?在任何情况下,我认为我的更新都是您想要的。您以前的代码中有一条错误消息:在预期条件的上下文中,在“;”附近指定了一个非布尔类型的表达式。您以前的代码中出现错误消息:在“;”附近预期条件的上下文中指定的非布尔类型表达式。