2016-05-20 5 views
-2

У меня есть следующий код, где нам нужно посмотреть наши запасы в 17 разных местах. Код, который у меня ниже, предназначен только для 5 местоположений, но работает. Посмотрите, есть ли более чистый более эффективный код, который мы можем использовать для получения тех же результатов.Более эффективный код

SELECT DISTINCT imitmidx_sql.item_no, imitmidx_sql.item_desc_1, imitmidx_sql.item_desc_2, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_1 WHERE (loc = '1') AND (item_no = imitmidx_sql.item_no)) AS Loc1, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_2 WHERE (loc = '2') AND (item_no = imitmidx_sql.item_no)) AS Loc2, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_3 WHERE (loc = '3') AND (item_no = imitmidx_sql.item_no)) AS Loc3, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_4 WHERE (loc = '4') AND (item_no = imitmidx_sql.item_no)) AS Loc4, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_5 WHERE (loc = '5') AND (item_no = imitmidx_sql.item_no)) AS Loc5 
FROM iminvloc_sql INNER JOIN imitmidx_sql ON iminvloc_sql.item_no = imitmidx_sql.item_no 
+0

Почему вы альясинг ваших имен таблиц в ваших LocN лет, когда вы даже не используя псевдоним? – Dresden

ответ

0

Как насчет:

select 
    imitmidx_sql.item_no, 
    imitmidx_sql.item_desc_1, 
    imitmidx_sql.item_desc_2, 
    itm_loc_qty.* 

    from iminvloc_sql 

pivot (SUM(qty_on_hand) for loc in ([1],[2],[3],[4],[5])) as itm_loc_qty -- Add here as necessary 

join imitmidx_sql 
on itm_loc_qty.item_no = imitmidx_sql.item_no 
+0

Код Op существенно изменяет результаты. Если в 'iminvloc_sql 'есть 5 связанных *** строк ***, коррелированные подзапросы дают их как 5 *** полей ***. В вашем запросе сохраняются 5 строк, не сделав опорный стержень. – MatBailie

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