2017-06-02 4 views
0

Ich habe ein Problem, bei dem eine Tabelle wie folgt eingerichtet werden kann. Ich möchte nur die Datensätze zurückgeben, die BA in Spalte C haben, aber ich möchte auch zeigen, dass diese Datensätze eine Zeile für AA haben.SQL Auswählen eines Datensatzes basierend auf einer Spalte, aber Anzeigen aller Werte in der Spalte


Name, Rechnung, code, Zahlung

name1, 111, BA, $ 20

name1, 112, AA, 50 $

name2, 113, AA, 50 $


Durch Hinzufügen von Code = BA in der Where-Klausel, bekomme ich nur Zeile 1. Ich möchte nur den Name1 Name b ziehen Weil es eine Rechnung mit dem BA-Code hat, aber ich möchte auch die zweite Zeile ziehen, weil es die gleiche Person ist und ich alle Zahlungen für jede Person zeigen möchte, die einen BA-Code hat. Angenommen, die Rechnung 111 war eine Teilzahlung mit dem Fehlercode BA, und diese Person kam später zurück, um ihren Fehler zu korrigieren und eine zusätzliche Zahlung vorzunehmen. Ich möchte diese Korrektur auch zeigen können.

Vielen Dank im Voraus!

Antwort

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' 

ODER

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

Das funktionierte wunderbar. Vielen Dank! – Xero14

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

Während Code-Antworten möglicherweise das Problem lösen, ist es am besten, wenn Sie auch beschreiben, warum das Problem gelöst wird. – Enstage

+0

Während dieses Code-Snippet die Frage lösen kann, [hilft eine Erläuterung] (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) hilft wirklich, die Qualität Ihres Pfostens zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. –

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