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'
)
select * from tablename where name in (select name from tablename where code='BA')
尽管代码只回答可能会解决问题,但如果您还描述了解决问题的原因,那么最好。 – Enstage
虽然这段代码可能会解决这个问题,但是[包括解释](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]
这美丽的工作。谢谢! – Xero14