2017-08-02 133 views
0

我選擇了一些列,DATE列是datetime,我想只按收到標題的id和收到明細項目類別進行分組,但我運行的是SQL,我得到一個錯誤。如何成功運行?如何在SQL Server中按部分列進行分組

select 
    DATE as DATE, 
    RECEIPT_ID, 
    CATEGORY1, CATEGORY2, 
    SUM(CEILING(TOTAL_QTY/MEASURE.CONVERSION_QTY)) AS Qty, 
    SUM(ROUND(CEILING(TOTAL_QTY/MEASURE.CONVERSION_QTY) * 
     ROUND(MEASURE.LENGTH * MEASURE.WIDTH * MEASURE.HEIGHT/ 1000000.0, 9), 2)) AS cbm 
from 
    RECEIPT 
left join 
    MEASURE ON MEASURE.item = RECEIPT.ITEM 
      AND MEASURE.company = RECEIPT.COMPANY 
where 
    MEASURE.QUANTITY_UM = 'ctn' 
group by 
    RECEIPT_ID, CATEGORY1 
+0

你得到什麼錯誤? – Becuzz

+0

CATEGORY2需要添加到羣組中,以便您的查詢能夠正常工作。 – isaace

+0

@isaace以及日期(第一次選擇的列) – Eli

回答

1

必須組由所有非聚合列這是你的選擇條款的一部分。我修改了你的查詢來做到這一點 - 請參閱下文。
如果您只需要RECEIPT_ID和category1,需要GROUP BY,則不需要顯示其他兩列(日期和類別2),因爲它們已被合併。

SELECT 
     DATE as DATE, 
     RECEIPT_ID, 
     CATEGORY1, 
     CATEGORY2, 
     SUM(CEILING(TOTAL_QTY /MEASURE.CONVERSION_QTY)) as Qty, 
     SUM(Round(CEILING(TOTAL_QTY /MEASURE.CONVERSION_QTY)* Round(MEASURE.LENGTH * MEASURE.WIDTH * MEASURE.HEIGHT/ 1000000.0, 9), 2)) as cbm 
    from RECEIPT 
    left join MEASURE on MEASURE.item = RECEIPT.ITEM AND MEASURE.company = RECEIPT.COMPANY 
    WHERE MEASURE.QUANTITY_UM = 'ctn' 
    GROUP BY Date, RECEIPT_ID, CATEGORY1, CATEGORY2 
0

如果你沒有上進行分組DATECategory2,從查詢中刪除:

select RECEIPT_ID, 
    CATEGORY1, 
    SUM(CEILING(TOTAL_QTY /MEASURE.CONVERSION_QTY)) as Qty, 
    SUM(Round(CEILING(TOTAL_QTY /MEASURE.CONVERSION_QTY)* Round(MEASURE.LENGTH * MEASURE.WIDTH * MEASURE.HEIGHT/ 1000000.0, 9), 2)) as cbm 
    from RECEIPT 
    left join MEASURE on MEASURE.item = RECEIPT.ITEM AND MEASURE.company = RECEIPT.COMPANY 
    WHERE MEASURE.QUANTITY_UM = 'ctn' 
    group by RECEIPT_ID, CATEGORY1 

當使用GROUP BY SQL要求你SELECT條款各個領域要麼是:

  1. 列入您的GROUP BY條款或
  2. Containe聚合函數(例如,MINSUM等)
0

我懷疑你所得到的錯誤裏面d是:

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

必須GROUP BY其他列要從資金選擇(除),或者做一些複合查詢,以獲得您所需要

 group by DATE, RECEIPT_ID, CATEGORY1, CATEGORY2 
0

每當你嘗試使用GROUP BY在你查詢你必須提到的所有其他列選擇比那些在你公司的其他數據GREGATE函數.Coz,GROUP BY基於選擇中的其他列進行。因此,您不能在Select CLAUSE中包含所有列。

按照您發佈的需求描述,即需要通過RECEIPT_ID CATEGORY2組和CATEGORY1和您的查詢應該像下面

select 
    RECEIPT_ID, 
    CATEGORY1, 
    CATEGORY2, 
    SUM(CEILING(TOTAL_QTY /MEASURE.CONVERSION_QTY)) as Qty, 
    SUM(Round(CEILING(TOTAL_QTY /MEASURE.CONVERSION_QTY)* Round(MEASURE.LENGTH * MEASURE.WIDTH * MEASURE.HEIGHT/ 1000000.0, 9), 2)) as cbm 
    from RECEIPT 
    left join MEASURE on MEASURE.item = RECEIPT.ITEM AND MEASURE.company = RECEIPT.COMPANY 
    WHERE MEASURE.QUANTITY_UM = 'ctn' 
    group by RECEIPT_ID, CATEGORY1,CATEGORY2 
0

如果你有聚合函數在SQL中,所有的非集合列必須出現在group by子句中。作爲變通,您可以在第一次SQL子句中使用,例如工會,這樣你就

SELECT RECEIPT_ID, CATEGORY1和資金,並在第二查詢你列的其餘

相關問題