2012-02-21 3 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

В чем вопрос ??? –

+1

Надеюсь, вы не назвали свои таблицы '1' и' 2' и '3' ... –

ответ

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

+0

@Rene, предположим, что вы хотите получить 'count (ID)', поэтому это будет одно значение, но для выбранного 't3.Text' имеет много значений, поэтому вам нужно указать sql для группировки count с помощью' t3. Text', см. Это: http://stackoverflow.com/questions/9098265/mysql-count-not-working-properly/9098323#9098323 –

+0

Хорошо, теперь просто скажите: «Конверсия не удалась при преобразовании даты и времени из символьной строки», что у меня есть сделано неправильно сейчас? sry to boder you so much im new to this – Rene

0

Вы можете заменить SELECT 3.Text на SELECT COUNT(*), чтобы получить количество строк напрямую.

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' 

Edit: Я надеюсь, что 1 и 2 (таблицы название) и так далее, только для этого примера, потому что это не очень хорошая идея для вызова объектов таким образом ...