0

UPDATE: Thanks a lot guys. You have my upvotes. My problem seem to be something else entirely.

I'm trying to get sum(QTY) from TBL_INVTY but I can't correctly join this table with TBL_ITEM. There is this column PARENT_CODE that complicates things for me. Let me better explain it like this...

TBL_ITEM

+------+-------------+
| CODE | PARENT_CODE | 
+------+-------------+
|    2 |        NULL |
|   2A |           2 |
|   2B |           2 |
|    3 |        NULL |
|    4 |        NULL |
+------+-------------+

TBL_INVTY

+------+-----+
| CODE | QTY |
+------+-----+
|    2 |   2 |
|   2A |   4 |
|   2B |   1 |
|    3 |   3 |
|    4 |   5 |
+------+-----+

And, arrive on this:

+------+-----+
| CODE | QTY |
+------+-----+
|    2 |   7 |
|    3 |   3 |
|    4 |   5 |
+------+-----+
4

4 回答 4

2

A rough guess as to how this might work is:

SELECT IFNULL(tbl_item.parent_code, tbl_invty.code) AS t_code, SUM(qty) AS t_qty
  FROM tbl_invty
  LEFT JOIN tbl_item ON tbl_invty.code=tbl_item.code
  GROUP BY t_code

The key here is using IFNULL to select between the parent ID, or if none is present, then the regular id.

于 2013-04-24T05:54:22.367 回答
2
SELECT t_code,sum(qty) from
(SELECT IFNULL(parent_code, code) as t_code, code 
FROM tbl_item) a left join tbl_invty b on a.code=b.code
GROUP BY a.t_code

http://www.sqlfiddle.com/#!2/749b5/1

于 2013-04-24T06:10:45.030 回答
1

Try this ,

SELECT CONVERT(code, SIGNED) as code ,sum(QTY) from TBL_INVTY group by CONVERT(code, SIGNED);

SQL Fiddle Demo

于 2013-04-24T06:05:27.133 回答
1

SQLFIDDLE demo

select CASE WHEN TBL_ITEM.PARENT_CODE IS NOT NULL 
       THEN
        TBL_ITEM.PARENT_CODE 
       ELSE
        TBL_ITEM.code 
       END, SUM(Qty)
FROM
TBL_INVTY
join TBL_ITEM on TBL_INVTY.code=TBL_ITEM.code

GROUP BY 
CASE WHEN TBL_ITEM.PARENT_CODE IS NOT NULL 
       THEN
        TBL_ITEM.PARENT_CODE 
       ELSE
        TBL_ITEM.code 
       END
于 2013-04-24T06:11:30.127 回答