SQL根据列选择记录,但显示所有列中的所有值

问题描述:

我遇到问题,可以如下设置表。我只想返回列C中具有BA的记录,但我也想显示这些记录有AA的一行。SQL根据列选择记录,但显示所有列中的所有值


名称,发票,代码,支付

NAME1,111,BA,$ 20

NAME1,112,AA,$ 50

NAME2,113,AA,50 $


通过在Where子句中添加代码= BA,我只得到第1行。我只想将name1名称b因为它有一个BA代码发票,但我也想拉第二行,因为它是同一个人,我想显示任何有BA代码的人的所有付款。假设发票111是部分付款,错误代码为BA,该人稍后回来纠正其错误并支付额外费用。我也希望能够证明这一点。

在此先感谢!

DECLARE @Table TABLE 
(
    name nvarchar(10), 
    invoice int, 
    code nvarchar(2), 
    payment money 
) 

INSERT INTO @Table 
VALUES 
('name1', 111, 'BA', 20), 
('name1', 112, 'AA', 50), 
('name2', 113, 'AA', $50) 

SELECT t2.* 
FROM @Table AS t 
INNER JOIN @Table AS t2 ON t.name = t2.name 
WHERE t.code = 'BA' 

OR

SELECT * 
FROM @Table AS t 
WHERE EXISTS 
(
    SELECT 1 
    FROM @Table AS t2 
    WHERE t.name = t2.name AND t2.code = 'BA' 
) 
+0

这美丽的工作。谢谢! – Xero14

select * from tablename where name in (select name from tablename where code='BA') 
+2

尽管代码只回答可能会解决问题,但如果您还描述了解决问题的原因,那么最好。 – Enstage

+0

虽然这段代码可能会解决这个问题,但是[包括解释](https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –

SELECT t1.* 
FROM [Table] t1 
INNER JOIN 
(
    SELECT DISTINCT [name] FROM [Table] WHERE code = 'BA' 
) t2 ON t2.[name] = t1.[name]