SQL - 我如何才能将更多行合并为一篇文章?

时间:2017-06-15 12:08:53

标签: sql

这是图片究竟是什么问题。 我想通过订单和文章将overed_qty合并为一行,这就是我的困惑。

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 个答案:

答案 0 :(得分: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