我有一個表,像這樣的列:SQL要計算多列的值
1,名稱,name_thesame,adress1,adress2,adress_thesame,city1,位於City2,city_thesame
在結尾的所有列_thesame,有一個真實的或假的,如果name1和name2是相同的,與地址等相同等012等等。
無法包裝我的頭如何做這個查詢 - 任何機構有一些想法或指針?由於
我有一個表,像這樣的列:SQL要計算多列的值
1,名稱,name_thesame,adress1,adress2,adress_thesame,city1,位於City2,city_thesame
在結尾的所有列_thesame,有一個真實的或假的,如果name1和name2是相同的,與地址等相同等012等等。
無法包裝我的頭如何做這個查詢 - 任何機構有一些想法或指針?由於
對於單一的屬性,你可以這樣做:
select name_thesame, count(*)
from table
group by name_thesame
這會給你類似的結果:
true 10
false 15
如果你想擁有它用作多個列的列表,你可以工會查詢:
select 'Name', name_thesame, count(*)
from table
group by name_thesame
union
select 'Address', adress_thesame, count(*)
from table
group by adress_thesame
越來越:
Name true 10
Name false 15
Address true 20
Address false 5
謝謝,是的,這會給我正確的結果。不過,我希望有一個解決方案來編程,所以我不必硬編碼每個列的名稱,因爲有100多個我希望計數完成的地方。但我會接受答案並進行硬編碼,謝謝 – user2199192
@ user2199192您應該在您的問題中指定... –
說實話,100+(表中的300+字段)是一點紅旗,設計明智:) – SWeko
這是另一種選擇:
SELECT SUM(CASE WHEN name_thesame = true THEN 1 ELSE 0 END) as nametrue,
SUM(CASE WHEN name_thesame = false THEN 1 ELSE 0 END) as namefalse,
SUM(CASE WHEN adress_thesame = true THEN 1 ELSE 0 END) as adresstrue,
SUM(CASE WHEN adress_thesame = false THEN 1 ELSE 0 END) as adressfalse,
SUM(CASE WHEN city_thesame = true THEN 1 ELSE 0 END) as citytrue,
SUM(CASE WHEN city_thesame = false THEN 1 ELSE 0 END) as cityfalse
FROM yourTable
你可以調整它來處理NULL
S以及如果相關:
...
CASE WHEN name_thesame = false OR name_thesame IS NULL THEN 1 ELSE 0 END
...
或任NVL()
,ISNULL()
,IFNULL()
或COALESCE()
,取決於您正在使用的DBMS(語法始終相同):
...
CASE WHEN COALESCE(name_thesame, false) = false THEN 1 ELSE 0 END
...
結果:
nametrue | namefalse | adresstrue | adressfalse | citytrue | cityfalse
5 | 7 | 2 | 1 | 10 | 8
您正在使用哪個數據庫管理系統? – pedram
編輯您的問題並提供樣本數據和預期結果。這個問題並不完全清楚。 –
http://stackoverflow.com/questions/17194145/sql-count-based-on-column-value是幾乎相同的問題 – Terminus