如果 table 中不存在行,如何获取另一行的值?
How to get value of another row if row does not exist in table?
我有两个 table,分别命名为 tbl_brands
和 tbl_counter_stock
。
在 tbl_brands
中有品牌 ID 和品牌名称的键值对。
tbl_counter_stock
中的列如 brnd_id
、2000ml
、1000ml
、stock
、stock_date
。
每行代表不同库存的利口酒品牌
O型开口,
R-收到,
S-销售,
C-关闭
我想从此 table 中获取每个品牌的期末库存记录,如果此 table 中不存在 C(期末库存)条目,那么我想获取 O(期初库存)那个品牌。如果该品牌的期末库存已经存在,我将获得期初库存和期末库存的两个值。这不是我想要的结果。只有当 C(收盘库存)不存在时,我才想获得 O(开盘库存)。
提前致谢。
SELECT
A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0) bottles,
B.stock,B.stock_date
FROM tbl_brands A
left OUTER JOIN
tbl_counter_stock AS B
on A.BRND_ID=B.BRND_ID
AND B.STOCK IN('O','C')
AND B.STOCK_DATE='2017-01-18'
我认为创建 table:
时解决方案更容易理解
创建一个仅包含 Closing_Stock 的 table (table_C)(WHERE CLAUSE 减少为 B.STOCK='C')
然后从您的 tbl_brands 向左加入您的 table_C 以找到所有缺少收盘库存记录的 brand_ids 并加入您的 tbl_counter_stock (WHERE B.STOCK='O') 以插入缺少的 ID。
CREATE TABLE brand_stock_overview (Key brnd_id(brnd_id))
SELECT A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0)
bottles, B.stock,B.stock_date
FROM tbl_brands A
LEFT JOIN tbl_counter_stock AS B ON(A.BRND_ID=B.BRND_ID)
WHERE B.STOCK ='C'
AND B.STOCK_DATE='2017-01-18';
INSERT INTO brand_stock_overview
SELECT A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0)
bottles, B.stock, B.stock_date
FROM tbl_brands A
LEFT JOIN tbl_counter_stock AS B ON(A.BRND_ID=B.BRND_ID)
LEFT JOIN brand_stock_overview C ON(A.BRND_ID=C.BRND_ID)
where B.STOCK='O' AND C.BRND_ID IS NULL
AND B.STOCK_DATE='2017-01-18';
我有两个 table,分别命名为 tbl_brands
和 tbl_counter_stock
。
在 tbl_brands
中有品牌 ID 和品牌名称的键值对。
tbl_counter_stock
中的列如 brnd_id
、2000ml
、1000ml
、stock
、stock_date
。
每行代表不同库存的利口酒品牌
O型开口,
R-收到,
S-销售,
C-关闭
我想从此 table 中获取每个品牌的期末库存记录,如果此 table 中不存在 C(期末库存)条目,那么我想获取 O(期初库存)那个品牌。如果该品牌的期末库存已经存在,我将获得期初库存和期末库存的两个值。这不是我想要的结果。只有当 C(收盘库存)不存在时,我才想获得 O(开盘库存)。
提前致谢。
SELECT
A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0) bottles,
B.stock,B.stock_date
FROM tbl_brands A
left OUTER JOIN
tbl_counter_stock AS B
on A.BRND_ID=B.BRND_ID
AND B.STOCK IN('O','C')
AND B.STOCK_DATE='2017-01-18'
我认为创建 table:
时解决方案更容易理解
创建一个仅包含 Closing_Stock 的 table (table_C)(WHERE CLAUSE 减少为 B.STOCK='C')
然后从您的 tbl_brands 向左加入您的 table_C 以找到所有缺少收盘库存记录的 brand_ids 并加入您的 tbl_counter_stock (WHERE B.STOCK='O') 以插入缺少的 ID。
CREATE TABLE brand_stock_overview (Key brnd_id(brnd_id))
SELECT A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0)
bottles, B.stock,B.stock_date
FROM tbl_brands A
LEFT JOIN tbl_counter_stock AS B ON(A.BRND_ID=B.BRND_ID)
WHERE B.STOCK ='C'
AND B.STOCK_DATE='2017-01-18';
INSERT INTO brand_stock_overview
SELECT A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0)
bottles, B.stock, B.stock_date
FROM tbl_brands A
LEFT JOIN tbl_counter_stock AS B ON(A.BRND_ID=B.BRND_ID)
LEFT JOIN brand_stock_overview C ON(A.BRND_ID=C.BRND_ID)
where B.STOCK='O' AND C.BRND_ID IS NULL
AND B.STOCK_DATE='2017-01-18';