2014-01-14 112 views
0

我需要一些帮助。请参考下面的图片: -在某些条件下提取数据

enter image description here

如何通过SQL这样做呢?

enter image description here

通过使用下面的SQL: -

Select Size, Grade, sum(Qty) Qty, Price, sum(Qty*Price) Value 
From TableA 
Left outer join 
TableB 
on a.Size=b.Size and a.Grade=b.Grade 

感谢

+0

你能告诉我们你已经尝试了什么? –

+0

我通过添加到目前为止所做的高级操作来编辑上述内容。 – Bob

+0

我正在使用SQL Server – Bob

回答

1

你可以做到这一点

WITH agg_cte AS 
(
    SELECT size, 
     SUM(CASE WHEN grade = '1' THEN qty END) qty1, 
     SUM(CASE WHEN grade = '2' THEN qty END) qty2 
    FROM tableb 
    GROUP BY size 
), totals AS 
(
    SELECT size, qty1, 
     CASE WHEN qty2 > qty1 * 0.2 THEN qty1 * 0.2 ELSE qty2 END qty2, 
     CASE WHEN qty2 > qty1 * 0.2 THEN qty2 - qty1 * 0.2 ELSE 0 END qty2e 
    FROM agg_cte 
) 
SELECT p.size, p.grade, 
     CASE p.grade WHEN '1' THEN qty1 
        WHEN '2' THEN qty2 
        WHEN '2E' THEN qty2e 
     END qty, 
     p.price, 
     CASE p.grade WHEN '1' THEN qty1 
        WHEN '2' THEN qty2 
        WHEN '2E' THEN qty2e 
     END * p.price value 
FROM TableA p JOIN totals t 
    ON p.size = t.size 

输出:

 
| SIZE | GRADE | QTY | PRICE | VALUE | 
|-------|-------|-----|-------|-------| 
| 10/12 |  1 | 5 | 2.39 | 11.95 | 
| 10/12 |  2 | 1 | 1.79 | 1.79 | 
| 10/12 | 2E | 3 | 1.55 | 4.65 | 

这里是SQLFiddle演示

+0

到目前为止,有用。非常感谢 – Bob