2017-06-02 127 views
0

我遇到問題,可以如下設置表。我只想返回列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,該人稍後回來糾正其錯誤並支付額外費用。我也希望能夠證明這一點。

在此先感謝!

回答

1
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

0
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)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 –

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