2015-09-16 15 views
0

我期待創建一個select語句,當兩個行的連接不同時,我選擇所有列和行。下面我有我的SQL語句。但是,我不確定如何正確地創建這個聲明,這個聲明怎麼寫呢?SQL選擇所有Concat不同的地方

$query = "SELECT * FROM APPROVED 
    WHERE DISTINCT CONCAT(P_NUMBER,'-',A_NUMBER) AS CNUMBER 
    AND (STATUS = 'ACTIVE' OR STATUS = 'CLOSED' OR STATUS = 'CLOSING' OR STATUS = 'PENDING')"; 
+0

你確定這是針對microsoft sql-server標記和標題?語法看起來不對。 (特別是'WHERE DISTINCT'和'TO_DATE')...或者是這個問題 - 如何將其轉換爲SQLServer語法? – Jamiec

+0

對不起,這已經相應更新。我有一個爲mssql呈現mysql代碼的引擎。 – vector

+0

然後它不起作用。 mssql沒有函數'TO_DATE' – Jamiec

回答

0

DISTINCT用於列選擇。有幾個方法可以做到這一點:

SELECT DISTINCT CONCAT(P_NUMBER,'-',A_NUMBER) AS CNUMBER FROM APPROVED WHERE 
AND (STATUS = 'ACTIVE' OR STATUS = 'CLOSED' OR STATUS = 'CLOSING' OR STATUS =  'PENDING') 

應該做幾乎同樣的事情

SELECT * FROM APPROVED WHERE 
AND (STATUS = 'ACTIVE' OR STATUS = 'CLOSED' OR STATUS = 'CLOSING' OR STATUS =  'PENDING') 
GROUP BY CONCAT(P_NUMBER,'-',A_NUMBER) 

第二不包括在結果的串聯,而第一個只包括級聯。您需要指定所有要返回的列。

+0

因此,如果我使用第二個查詢,那麼我將只拉取不同的行,因爲我不想拉取具有CONCAT重複條目的行(P_NUMBER,' - ',A_NUMBER)? – vector

+0

是的,但考慮如果有兩行具有相同的P_NUMBER和A_NUMBER會發生什麼情況。 *你想要哪些*值的其他列?您可能需要像BIGGEST,SUM,AVERAGE,GROUP_CONCAT這樣的分組函數來使這些列有意義 –

+0

例如,您有兩行具有相同的P_NUMBER和A_NUMBER,但其中一個具有STATUS ='Closed',另一個是'Active',您會得到其中的一個值,但是你無法預測哪一個值。 –