2015-09-14 3 views
-1

У меня есть запрос, как это:сумма определенного столбца получать ошибки

SELECT DISTINCT 
    dbo.T_Order_Header.F_Exhibitor, 
    dbo.T_Order_Header.F_Exhibition, 
    dbo.T_Exhibition.F_Exhibition_Name, 
    dbo.T_Exhibitor.F_Exhibitor_Name, 
    dbo.T_Order_Detail.F_ItemCode, 
    dbo.T_L2Category.F_L2Cat_Name, 
    SUM(dbo.T_Order_Detail.F_Qty-dbo.T_Order_Detail.F_CNQty) AS F_Qty, 
    dbo.T_L1Category.F_L1Cat_Name, 
    dbo.T_Order_Header.F_Stand, 
    dbo.T_Category.F_Cat_name, 
    dbo.T_ExStand.F_Bld_Code, 
    dbo.T_ExBuilding.F_Bld_name 
FROM dbo.T_Order_Header 
LEFT OUTER JOIN dbo.T_OrderAttachment 
    ON dbo.T_OrderAttachment.F_OrderNumber = dbo.T_Order_Header.F_OrderNumber 
LEFT OUTER JOIN dbo.T_Order_Detail 
    ON dbo.T_Order_Detail.[Header_ID] = dbo.T_Order_Header.[ID] 
LEFT OUTER JOIN dbo.T_L2Category 
    ON dbo.T_Order_Detail.F_ItemCode = dbo.T_L2Category.F_ItemCode 
LEFT OUTER JOIN dbo.T_L1Category 
    ON dbo.T_L1Category.F_L1Cat_Code = dbo.T_L2Category.F_L1Cat_Code 
LEFT OUTER JOIN dbo.T_Category 
    ON dbo.T_Category.F_Cat_Code = dbo.T_L2Category.F_Cat_Code 
LEFT OUTER JOIN dbo.T_ExStand 
    ON dbo.T_ExStand.F_Stand_Code = dbo.T_Order_Header.F_Stand 
LEFT OUTER JOIN dbo.T_ExBuilding 
    ON dbo.T_ExStand.F_Bld_Code = dbo.T_ExBuilding.F_Bld_Code 
LEFT OUTER JOIN dbo.T_Exhibition 
    ON dbo.T_Order_Header.F_Exhibition = dbo.T_Exhibition.F_Exhibition_Code 
LEFT OUTER JOIN dbo.T_Exhibitor 
    ON dbo.T_Order_Header.F_Exhibitor = dbo.T_Exhibitor.F_Exhibitor_Code 
WHERE 
    F_Stand IN(
     SELECT F_Stand_Code 
     FROM T_ExStand 
     WHERE 
      F_Site_Code ='DWTC' 
      AND F_Bld_Code = 'HALL1-4 & CONCOURSE' 
    ) 
    AND T_Order_Header.F_Exhibition = '12004' 
    AND T_Order_Header.F_IsActive = 1 
    AND F_Exhibitor='2467' 

Я хочу, чтобы показать сумму F_qty, но я получаю эту ошибку:

Column 'dbo.T_Order_Header.F_Exhibitor' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause

+1

Пожалуйста, сообщите об ошибке. –

+0

Если я добавлю сумму, я получаю такую ​​ошибку: Столбец «dbo.T_Order_Header.F_Exhibitor» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. –

+0

Отправьте запрос, содержащий 'SUM', с ошибкой, которую вы получаете –

ответ

0

Вы должны группе с все столбцы, которые вы выбираете (кроме того, что находится в функции агрегата), примерно так:

SELECT 
dbo.T_Order_Header.F_Exhibitor, 
dbo.T_Order_Header.F_Exhibition, 
dbo.T_Exhibition.F_Exhibition_Name, 
dbo.T_Exhibitor.F_Exhibitor_Name, 
dbo.T_Order_Detail.F_ItemCode, 
dbo.T_L2Category.F_L2Cat_Name, 
SUM(dbo.T_Order_Detail.F_Qty-dbo.T_Order_Detail.F_CNQty) AS F_Qty, 
dbo.T_L1Category.F_L1Cat_Name, 
dbo.T_Order_Header.F_Stand, 
dbo.T_Category.F_Cat_name, 
dbo.T_ExStand.F_Bld_Code, 
dbo.T_ExBuilding.F_Bld_name 
FROM dbo.T_Order_Header 
LEFT OUTER JOIN dbo.T_OrderAttachment 
ON dbo.T_OrderAttachment.F_OrderNumber = dbo.T_Order_Header.F_OrderNumber 
LEFT OUTER JOIN dbo.T_Order_Detail 
ON dbo.T_Order_Detail.[Header_ID] = dbo.T_Order_Header.[ID] 
LEFT OUTER JOIN dbo.T_L2Category 
ON dbo.T_Order_Detail.F_ItemCode = dbo.T_L2Category.F_ItemCode 
LEFT OUTER JOIN dbo.T_L1Category 
ON dbo.T_L1Category.F_L1Cat_Code = dbo.T_L2Category.F_L1Cat_Code 
LEFT OUTER JOIN dbo.T_Category 
ON dbo.T_Category.F_Cat_Code = dbo.T_L2Category.F_Cat_Code 
LEFT OUTER JOIN dbo.T_ExStand 
ON dbo.T_ExStand.F_Stand_Code = dbo.T_Order_Header.F_Stand 
LEFT OUTER JOIN dbo.T_ExBuilding 
ON dbo.T_ExStand.F_Bld_Code = dbo.T_ExBuilding.F_Bld_Code 
LEFT OUTER JOIN dbo.T_Exhibition 
ON dbo.T_Order_Header.F_Exhibition = dbo.T_Exhibition.F_Exhibition_Code 
LEFT OUTER JOIN dbo.T_Exhibitor 
ON dbo.T_Order_Header.F_Exhibitor = dbo.T_Exhibitor.F_Exhibitor_Code 
WHERE 
F_Stand IN(
    SELECT F_Stand_Code 
    FROM T_ExStand 
     WHERE 
      F_Site_Code ='DWTC' 
      AND F_Bld_Code = 'HALL1-4 & CONCOURSE' 
    ) 
    AND T_Order_Header.F_Exhibition = '12004' 
    AND T_Order_Header.F_IsActive = 1 
    AND F_Exhibitor='2467' 
group by dbo.T_Order_Header.F_Exhibitor, 
dbo.T_Order_Header.F_Exhibition, 
    dbo.T_Exhibition.F_Exhibition_Name, 
dbo.T_Exhibitor.F_Exhibitor_Name, 
dbo.T_Order_Detail.F_ItemCode, 
dbo.T_L2Category.F_L2Cat_Name, 
dbo.T_L1Category.F_L1Cat_Name, 
dbo.T_Order_Header.F_Stand, 
dbo.T_Category.F_Cat_name, 
dbo.T_ExStand.F_Bld_Code, 
dbo.T_ExBuilding.F_Bld_name 
+0

привет, это тоже не решает мою проблему. Есть ли способ, которым я могу взять только код элемента без отдельного? –

+0

Попробуйте удалить ключевое слово Distinct в этом ... –

+0

no mam..this также не удалось решить мою проблему.активно, если я добавлю dbo.T_Order_Header.F_OrderNumber в моем запросе моя проблема будет решена. Но я не хочу показывать эту запись –

0

Используйте запрос ниже для вашего требования.

SELECT DISTINCT 
    dbo.T_Order_Header.F_Exhibitor, 
    dbo.T_Order_Header.F_Exhibition, 
    dbo.T_Exhibition.F_Exhibition_Name, 
    dbo.T_Exhibitor.F_Exhibitor_Name, 
    dbo.T_Order.F_ItemCode, 
    dbo.T_L2Category.F_L2Cat_Name, 
    T_Order.F_Qty F_Qty, 
    dbo.T_L1Category.F_L1Cat_Name, 
    dbo.T_Order_Header.F_Stand, 
    dbo.T_Category.F_Cat_name, 
    dbo.T_ExStand.F_Bld_Code, 
    dbo.T_ExBuilding.F_Bld_name 
FROM dbo.T_Order_Header 
LEFT OUTER JOIN dbo.T_OrderAttachment 
    ON dbo.T_OrderAttachment.F_OrderNumber = dbo.T_Order_Header.F_OrderNumber 
LEFT OUTER JOIN 
(select SUM(dbo.T_Order_Detail.F_Qty)-sum(dbo.T_Order_Detail.F_CNQty) AS F_Qty, 
    [Header_ID],F_ItemCode from 
    dbo.T_Order_Detail 
    group by 
    [Header_ID]) T_Order ON dbo.T_Order.[Header_ID] = dbo.T_Order_Header.[ID] 
LEFT OUTER JOIN dbo.T_L2Category 
    ON dbo.F_ItemCode.F_ItemCode = dbo.T_L2Category.F_ItemCode 
LEFT OUTER JOIN dbo.T_L1Category 
    ON dbo.T_L1Category.F_L1Cat_Code = dbo.T_L2Category.F_L1Cat_Code 
LEFT OUTER JOIN dbo.T_Category 
    ON dbo.T_Category.F_Cat_Code = dbo.T_L2Category.F_Cat_Code 
LEFT OUTER JOIN dbo.T_ExStand 
    ON dbo.T_ExStand.F_Stand_Code = dbo.T_Order_Header.F_Stand 
LEFT OUTER JOIN dbo.T_ExBuilding 
    ON dbo.T_ExStand.F_Bld_Code = dbo.T_ExBuilding.F_Bld_Code 
LEFT OUTER JOIN dbo.T_Exhibition 
    ON dbo.T_Order_Header.F_Exhibition = dbo.T_Exhibition.F_Exhibition_Code 
LEFT OUTER JOIN dbo.T_Exhibitor 
    ON dbo.T_Order_Header.F_Exhibitor = dbo.T_Exhibitor.F_Exhibitor_Code 
WHERE 
    F_Stand IN(
     SELECT F_Stand_Code 
     FROM T_ExStand 
     WHERE 
      F_Site_Code ='DWTC' 
      AND F_Bld_Code = 'HALL1-4 & CONCOURSE' 
    ) 
    AND T_Order_Header.F_Exhibition = '12004' 
    AND T_Order_Header.F_IsActive = 1 
    AND F_Exhibitor='2467' 
+0

Msg 102 , Уровень 15, Состояние 1, Строка 20 Неверный синтаксис рядом с.. Msg 156, Level 15, State 1, Line 45 Неверный синтаксис рядом с ключевым словом «AND». –

+0

@jasbacker сообщите мне, столбец F_Stand из таблицы t_order_detail? –

+0

no sir..F_stand не в T_order Подробнее –

0

Вы используете функцию SQL group. В этом случае вам нужно добавить GROUP BY в конце sql-инструкции. Пожалуйста, добавьте все общие столбцы в пункт GROUP BY, кроме F_Qty. И удалите DISTINCT из вашего оператора select.

Смежные вопросы