2012-02-21 25 views
-1

嘿,我需要對幾張桌子進行計數,我必須加入它們。INNER JOIN 3個表格並計算它們

string strSQL = @"SELECT 3.Text 
       FROM 1 WHERE [email protected] AND [email protected] AND [email protected] AND 1.Date BETWEEN '@DateFrom' and '@DateTo' INNER JOIN 
       2 ON 1.ID = 2.1ID INNER JOIN 
       3 ON 2.3ID = 3.ID"; 

SqlCommand objCMD = new SqlCommand(strSQL); 

    objCMD.Parameters.Add("@ProductID", SqlDbType.Int).Value = ProductID; 
    objCMD.Parameters.Add("@CategoryID", SqlDbType.Int).Value = CategoryID; 
    objCMD.Parameters.Add("@CustomerID", SqlDbType.Int).Value = CustomerID; 
    objCMD.Parameters.Add("@text", SqlDbType.VarChar).Value = text; 
    objCMD.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = DateFrom; 
    objCMD.Parameters.Add("@DateTo", SqlDbType.DateTime).Value = DateTo; 
    return objData.GetData(objCMD, _Con).Rows.Count; 

我一直歌廳一個的錯誤說附近有INNER一個不正確的語法,

在哪裏,我錯了???

+1

什麼是問題? – 2012-02-21 07:52:42

+1

我當然希望你沒有命名你的表'1'和'2'和'3' ... – 2012-02-21 08:04:02

回答

1

JOIN條款這樣的連接條件之前:

SELECT t3.Text, COUNT(ID) 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.ID = t2.ID 
INNER JOIN Table3 t3 ON t2.ID = t3.ID 
WHERE t1.ProductID = @ProductID 
     AND t1.CustomerID = @CustomerID 
     AND [email protected] 
     AND t1.Date BETWEEN '@DateFrom' and '@DateTo' 
GROUP BY t3.TEXT 
+0

GROUP BY的用法是什麼? – Rene 2012-02-21 08:30:47

+0

@Rene,假設你想得到'count(ID)',所以它會是一個值,但是對於選中的't3.Text'有很多值,所以你必須告訴sql來用't3對count進行分組。文本',看到這個:http://stackoverflow.com/questions/9098265/mysql-count-not-working-properly/9098323#9098323 – 2012-02-21 08:34:22

+0

好了,現在它只是說「轉換日期時間從字符串轉換失敗」我有什麼現在做錯了?因爲't1.Date'在你的表中被定義爲'date'或'datetime',所以你需要將'@ DateFrom'和'@ DateTo'轉換成這個 – Rene 2012-02-21 08:41:20

0

您可以用SELECT COUNT(*)替換SELECT 3.Text以直接獲取行數。

2

stringSql是絕對錯誤的。 您不能以這種方式混合WHERE/ON運營商。

你必須糾正它,讓這樣的事情:

SELECT 
    COUNT(*) 
FROM 1 INNER JOIN 2 
    ON 1.ID = 2.ID 
INNER JOIN 3 
    ON 2.ID = 3.ID 
WHERE 
    [email protected] 
    AND 
    [email protected] 
    AND 
    [email protected] 
    AND 
    1.Date BETWEEN '@DateFrom' and '@DateTo' 

編輯:我希望12(表名)等都是隻在這個例子中,因爲是不是一個好主意以這種方式致電實體...