2017-11-10 124 views
0

我努力在SQL Server中做一些超級簡單的事情。相當於MySQL的T-SQL與其他表格相似

我想從一個表中獲取一些列(讓我們只是爲了簡單起見),然後根據第一個表中的鍵計算另一個表的其他列,並在結果集中包含兩個值。

下面的查詢工作在MySQL,但並沒有在SQL Server:

SELECT 
    ph.PONum, 
    COUNT(pd.POLine) AS LineCount 
FROM 
    POHeader AS ph 
INNER JOIN 
    PODetail AS pd ON ph.POnum = pd.PONum 
WHERE 
    ph.PONum = 4444 

結果:

enter image description here

什麼是SQL服務器(T-SQL)的方式來做到這一點?

+0

MySQL不使用'[table_name]'表示法。 – tadman

+0

是的,我知道,但這不是這個問題的要點。 –

+0

嗯,我讀它是因爲你試圖在MySQL端使用它。 – tadman

回答

3

與MySQL不同,SQL Server不會假設您想要分組的列。每個未彙總的列需要在GROUP BY列表中定義。

您所查詢的應該是:

SELECT 
    ph.PONum, 
    COUNT(pd.POLine) AS LineCount 
FROM 
    [Dbo].POHeader AS ph 
INNER JOIN 
    [Dbo].PODetail AS pd ON ph.POnum = pd.PONum 
WHERE 
    ph.PONum = 4444 
GROUP BY 
    ph.PONum 
+1

所以如果我有20個領域,我抓住我必須做GROUP BY field1,field2,field3等?哇,那是不方便的 –

+0

不幸的是。 – varubi

+2

@ S.Mason這是SQL標準。除非你使用'SET SESSION sql_mode = CONCAT(@@ sql_mode,',only_full_group_by');否則MySQL使用GROUP BY遵循SQL標準,參見http:// www .sqlfiddle.com /#!9/ece0d7/5 –

1

你也可以使用一個相關子查詢。 EG

SELECT 
    ph.PONum, 
    (select COUNT(*) from PODetail where PONum = ph.POnum) LineCount 
FROM 
    POHeader ph 
WHERE 
    ph.PONum = 4444 
+1

您的意思是一個相關的子查詢 –

+0

您在技術上是正確的 - 最好的一種正確的。 –