Memiliki tabel dengan 3 kolom:
ID category flag
1 A 1
2 A 0
3 A 0
4 B 0
5 C 0
Saya ingin memilih semua baris yang memiliki flag = 1
setidaknya satu kali per kategori.
Hasil yang diharapkan:
ID category flag
1 A 1
2 A 0
3 A 0
Itu bisa diselesaikan menggunakan tabel sementara seperti ini:
select ID into #tempTable from someTable where flag = 1
select * from someTable join #tempTable on someTable.ID = #tempTable.ID
Tetapi saya lebih suka solusi dengan pengelompokan, yang saya perjuangkan dengan susah payah. Bantuan apa pun akan dihargai.
sql-server
group-by
Piotr Falkowski
sumber
sumber
IN
kueri. Tetapi OP memiliki " Saya ingin memilih semua baris yang memiliki flag = 1 setidaknya sekali per kategori " yang membuat saya berpikir bahwaDISTINCT
ini diperlukan dalam pertanyaan lain.CROSS APPLY
,SELECT DISTINCT category
mungkin harus lebih efisien jika digantiSELECT TOP (1) whatever
. Ini akan secara efektif menjadi cara lain untuk menulisEXISTS
subquery.Dengan asumsi itu
Flag
adalahBIT
kolom atauINT
yang hanya mengambil0
dan1
sebagai nilai, ini dapat dicapai dengan menggunakan fungsi berjendela juga. Contohnya:Itulah hasilnya:
Ini akan menemukan yang tertinggi
Flag
untuk setiap kategori di tabel Anda, dalam kasus Anda itu mungkin benar / salah saja dan memilih satu yangtrue(1)
hanya memiliki .Konversi ke
TINYINT
diperlukan karenaMAX
tidak menerimaBIT
argumen.sumber