我的表格如下:
ID CustomerID AccountNumber StatusID
-------------------------------------
1 300 300100 1
2 300 300200 3
3 300 300300 3
4 400 400100 1
5 400 400200 1
6 500 500100 1
StatusID:
现在我需要选择帐户已获批准的所有客户(没有待处理的客户),但不会选择其帐户仍未处理的客户。
如果您需要更多详细信息,请告诉我。
答案 0 :(得分:4)
由客户分组,只接受没有status <> 1
select customerID
from your_table
group by customerID
having sum(case when status <> 1 then 1 else 0 end) = 0
答案 1 :(得分:3)
使用 HAVING 条款 MAX ,它将为您提供仅具有状态&#34;已批准&#34; = 1
SELECT
CustomerID
FROM @tblTest
GROUP BY CustomerID
HAVING MAX(StatusID)=1
答案 2 :(得分:2)
这是另一种基于提供的样本数据的简单方法
SELECT DISTINCT
T.ID,
T.CustomerID ,
T.AccountNumber ,
T.StatusID
FROM
Table1 T
INNER JOIN
(SELECT CID
FROM @Table1
WHERE StatusID = 3) TT ON T.CID <> TT.CID
答案 3 :(得分:1)
很容易获得具有待定帐户的所有客户的列表:
select customerID
from your_table
where StatusID = 3
因此只需选择客户不在上面的数据:
select distinct CustomerID
from your_table
where CustomerID not in (select customerID
from your_table
where StatusID = 3)
(distict
以避免死刑。)
答案 4 :(得分:0)
第一个答案似乎有效。另一种方法是做这个虽然有点长的
{{1}}
答案 5 :(得分:0)
另一种做法是简单的自我加入。
架构:
CREATE TABLE #TAB (ID INT, CustomerID INT, AccountNumber VARCHAR(20), StatusID INT)
INSERT INTO #TAB
SELECT 1,300,300100, 1
UNION ALL
SELECT 2,300,300200, 3
UNION ALL
SELECT 3,300,300300, 3
UNION ALL
SELECT 4,400,400100, 1
UNION ALL
SELECT 5,400,400200, 1
UNION ALL
SELECT 6,500,500100, 1
如下所示进行自我加入,并使用具有待定状态记录的Where子句进行过滤。
SELECT AP.* FROM #TAB AP
LEFT JOIN #TAB P ON AP.CustomerID = p.CustomerID
AND P.StatusID=3
WHERE AP.StatusID=1
AND P.ID IS NULL
答案 6 :(得分:0)
您可以使用下面的简单查询来获取其帐户已获批准的所有客户
select distinct(customerID)
from your_table
where StatusID = 1