2017-01-26 16 views
0

У меня есть две таблицы, называемые tbl_brands и tbl_counter_stock. В tbl_brands есть ключевая пара идентификаторов торговой марки и фирменного наименования. В колонках tbl_counter_stock показаны как brnd_id, 2000ml, 1000ml, stock, stock_date. Каждая строка представляет бренд ликера с различной акции как O-Открытие, R-Received, S-Sales, C-Закрыв Я хочу, чтобы принести записи для закрытия Шток каждого бренда из этой таблицы, и если запись для C (Closing Stock) отсутствует в этой таблице, тогда я хочу получить O (начальный запас) этого бренда. Я получаю обе значения открытия и закрытия акции, если для этого бренда уже присутствует Закрывающая акция. И для меня это не желаемый результат. Я хочу получить O (открытие акций) только в том случае, если C (Закрытие) отсутствует. Спасибо заранее.Как получить значение другой строки, если строка не существует в таблице?

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' 

ответ

1

Я думаю, что решение будет легче понять, когда вы создаете таблицу:
Создать таблицу (table_C) с Closing_Stock только (ИНЕКЕ сводится к B.STOCK = «C») Затем левый присоединиться от ваши tbl_brands на ваш стол_C, чтобы найти все brand_id, которые не имеют записи закрытия запаса, и присоединитесь к tbl_counter_stock (WHERE B.STOCK = 'O'), чтобы вставить отсутствующие идентификаторы.

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'; 
+0

Это потрясающее решение, и это сработало для меня. Я много боролся, и вы спасли меня :) Большое спасибо @iLikeMySql –

+0

Я рад, что могу вам помочь. Я только что заметил, что забыл STOCK_DATE во втором месте where и исправил его для полноты. – iLikeMySql

+0

Большое спасибо. Я сделал это сам :) –

 Смежные вопросы

  • Нет связанных вопросов^_^