我在尋找的是將同一個表中的不同數據進行分組並計數,並將它們顯示在兩個不同的列中。如下所示。在列中計數值
數據表A
領域:從查詢
Name Type
Bob 1
John 2
Bob 1
Steve 1
John 1
Bob 2
期望的結果:
Name Type 1 Type 2
Bob 2 1
John 1 1
Steve 1 0
我在尋找的是將同一個表中的不同數據進行分組並計數,並將它們顯示在兩個不同的列中。如下所示。在列中計數值
數據表A
領域:從查詢
Name Type
Bob 1
John 2
Bob 1
Steve 1
John 1
Bob 2
期望的結果:
Name Type 1 Type 2
Bob 2 1
John 1 1
Steve 1 0
@Seb有一個很好的解決方案,但它是依賴於服務器。下面是一個使用子查詢,應該是便攜式備用:
select
name,
(select count(type) from myTable where type=1 and name=a.name) as type1,
(select count(type) from myTable where type=2 and name=a.name) as type2
from
myTable as a
group by
name
使用兩個單獨的GROUP BY子查詢。
SELECT Name, a.Count1, b.Count2
from myTable
JOIN
(SELECT Name, SUM(Type) AS Count1 FROM myTable GROUP BY Name WHERE Type=1) AS a ON a.Name = myTable.Name
(SELECT Name, SUM(Type) FROM myTable GROUP BY Name WHERE Type=2) AS b ON b.Name = myTable.Name
沒時間寫代碼,但Case語句就是你想要的。如果它滿足要求,那麼它的值爲1,如果不滿足則爲零。然後你可以對列進行求和。
你正在尋找一個交叉的解決方案。上述解決方案可以工作,但如果你想要一個通用的解決方案並且有N種類型的話你就會陷入僵局。
CrossTab解決方案將爲您解決這個問題。如果這是爲了快速處理一些數字,那麼將數據轉儲到Excel中並使用本機數據透視表功能。
如果是針對應用程序中的RDBMS,則它取決於RDBMS。 MS SQL 2005及更高版本具有交叉表語法。見:
哎呀,我認爲這將取決於RDMS;不確定它可以在ANSI SQL中完成。這是哪個數據庫? –