2017-06-15 11 views
0

下面是圖片究竟是什麼問題。 我想按順序和文章將overed_qty合併成一行,這就是我的困惑。SQL - 如何將更多的行整合到一篇文章中?

image

-- Insert statements for procedure here  
    SELECT table_PrintJob.order_name, table_PrintJob.article_name, table_Orders.qty AS order_qty, 
     (CASE WHEN COUNT(*) OVER (PARTITION BY table_PrintJob.order_name,table_PrintJob.article_name) > 1             
     THEN SUM(table_PrintJob.qty * table_PrintJob.qty_operation) - MIN(SUM(table_PrintJob.qty * table_PrintJob.qty_operation)) 
     OVER (PARTITION BY table_PrintJob.order_name, table_PrintJob.article_name)       
     ELSE SUM(table_PrintJob.qty * table_PrintJob.qty_operation) END) AS overed_pieces,      
     SUM(table_PrintJob.repaired) AS repaired_qty 
     FROM table_PrintJob 
     INNER JOIN table_Orders On table_PrintJob.order_name = table_Orders.name 
     WHERE table_PrintJob.date_time BETWEEN @start_time AND @end_time 
     GROUP BY table_PrintJob.order_name, 
     table_PrintJob.article_name, 
     table_Orders.qty, 
     table_PrintJob.operation 
     ORDER BY table_PrintJob.order_name 
+1

哪些DBMS您使用的? –

+0

我正在使用CDBMS - comlumnar數據庫 - 這是標準。 –

+0

你的預期結果是什麼? – dbajtr

回答

0

,所以我找到了解決辦法:

SELECT * INTO #tmpTable 
FROM (
-- Insert statements for procedure here 
SELECT table_PrintJob.order_name, table_PrintJob.article_name, table_Orders.qty AS order_qty, 
    (CASE WHEN COUNT(*) OVER (PARTITION BY table_PrintJob.order_name,table_PrintJob.article_name) > 1             
    THEN SUM(table_PrintJob.qty * table_PrintJob.qty_operation) - MIN(SUM(table_PrintJob.qty * table_PrintJob.qty_operation)) 
    OVER (PARTITION BY table_PrintJob.order_name, table_PrintJob.article_name)       
    ELSE SUM(table_PrintJob.qty * table_PrintJob.qty_operation) END) AS overed_pieces,      
    SUM(table_PrintJob.repaired) AS repaired_qty 
    --INTO v_tx 
    FROM table_PrintJob 
    INNER JOIN table_Orders On table_PrintJob.order_name = table_Orders.name 
    WHERE table_PrintJob.date_time BETWEEN @start_time AND @end_time 
    GROUP BY table_PrintJob.order_name, 
    table_PrintJob.article_name, 
    table_Orders.qty, 
    table_PrintJob.operation 
    --ORDER BY table_PrintJob.order_name 
    ) AS x 

    select order_name, 
    article_name, 
    order_qty, 
    sum(#tmpTable.overed_pieces), 
    sum(#tmpTable.repaired_qty) 
    from #tmpTable 
    --INNER JOIN table_Orders On v_tx.order_name = table_Orders.name 
    group by order_name, 
    article_name, 
    #tmpTable.order_qty 
+0

如果您使用的是SQL Server,我建議使用CTE而不是填充臨時表,如果您只想從中查詢一次,則可以節省時間構建和填充它 – dbajtr

+0

感謝您的建議。我一直有點困惑,但現在沒問題。 –

相關問題