В настоящее время у меня есть таблица, состоящая из цен.SQL, создающий таблицу цен
Столбцы PriceList, ItemCode, DiscountLine, Amount, Price.
E.G.
*1 , ITEM1 , 0 , 100 , 0.50
*1 , ITEM1 , 1 , 200 , 0.45
1234 , ITEM1 , 0 , 100 , 0.45
1234 , ITEM1 , 1 , 100 , 0.40
Проблема заключается в том, PriceList может быть либо прейскурант (предшествует *) или номер клиента.
Мне нужен результат в одной строке;
так
CUSTOMER ITEM AMOUNT0 PRICE0 AMOUNT1 PRICE1
1234 ITEM1 100 0.45 200 0.40
для этого я использую следующий код:
select Customer.CardCode ,Customer.CardName,SP.* from Customer inner join (
select ItemCode,CardCode,
max(case when DPNum=0 then Amount end) Amount1,
max(case when DPNum=0 then Price end) Price1,
max(case when DPNum=1 then Amount end) Amount2,
max(case when DPNum=1 then Price end) Price2,
max(case when DPNum=2 then Amount end) Amount3,
max(case when DPNum=2 then Price end) Price3,
max(case when DPNum=3 then Amount end) Amount4,
max(case when DPNum=3 then Price end) Price4,
max(case when DPNum=4 then Amount end) Amount5,
max(case when DPNum=4 then Price end) Price5,
max(case when DPNum=5 then Amount end) Amount6,
max(case when DPNum=5 then Price end) Price6,
max(case when DPNum=6 then Amount end) Amount7,
max(case when DPNum=6 then Price end) Price7,
max(case when DPNum=7 then Amount end) Amount8,
max(case when DPNum=7 then Price end) Price8,
max(case when DPNum=8 then Amount end) Amount9,
max(case when DPNum=8 then Price end) Price9,
max(case when DPNum=9 then Amount end) Amount10,
max(case when DPNum=9 then Price end) Price10
from SPP2 group by ItemCode,CardCode
) sp
on sp.CardCode = Customer.CardCode or sp.CardCode = '*'+cast(ListNum as varchar(1))
where Customer.Cardcode='1234'
order by Customer.CardCode,ItemCode,sp.CardCode DESC
Это работает, кроме одной маленькой детали; Если у клиента есть прейскурант (и все клиенты делают) И у них «особые» цены; Я получаю 2 строки за элемент.
так Мой результат был бы:
CUSTOMER NAME ITEM PLCODE AMOUNT0 PRICE0 AMOUNT1 PRICE1
1234 DUMMY ITEM1 1234 100 0.45 200 0.40
1234 DUMMY ITEM1 *1 100 0.50 200 0.45
Если клиент имеет специальную цену, только это должно быть возвращено. Есть ли способ сделать это в одном запросе? (или, возможно, есть более эффективный способ делать то, что я пытаюсь выполнить)?
«Проблема в том, что PriceList может быть либо прейскурантом (которому предшествует *), либо номером клиента». - Да, это действительно ошибка дизайна. –
Да, вы правы. К сожалению, хорошие люди в SAP сделали эту ошибку дизайна. – Rknabben
Здесь хорошее место для начала. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –