SQL возвращает соответствующие значения для дублированных строк в отдельном столбце - PullRequest
0 голосов
/ 26 июня 2019

У меня более 10 тысяч кодов, которые я хочу извлечь из таблицы и показать цену продажи евро и стерлинга в отдельных столбцах.Мой код дублирует каждый код и возвращает обе валюты в 1 столбце, что составляет более 20 тыс. Строк.

Я не продвинутый техник :-( Я пытаюсь найти лучшие способы ведения дел. Я просмотрел несколько примеров, которые были менее сложными, и предложил функции PIVOT или Dynamic Table, но я не мог понять, как это сделать.реализовать это в моем коде, поэтому я до вас дошла, ребята. Я знаю, что вы, вероятно, можете сделать это с закрытыми глазами.

Код SQL

SELECT
    SI.Code AS [Item Code], SI.Name AS [Item Name], 
PLSA.SupplierAccountNumber AS [Supplier Code], SC.Symbol AS [Currency], 
SIS.ListPrice AS [€ Selling Price], PG.Code AS [PG Code]
    , PG.Description AS [PG Name], SIP.Price AS [Standard Cost]
    , CASE WHEN PB.PriceBandID = 129519 THEN '£ Standard'
    WHEN PB.PriceBandID = 1001 THEN '€ Standard'
    ELSE 'UNKNOWN' END AS [Selling Currency Std] 
    , SIS.SupplierStockCode AS [Supplier Stock Code], 
SIStatus.StockItemStatusName [Stock Code Status], SI.AnalysisCode8 AS 
 [Core / Non-Core]
    , SI.AnalysisCode7 AS [Product Chart], SI.AnalysisCode6 AS [Website Product]
FROM StockItem SI
    INNER JOIN StockItemSupplier SIS ON SIS.ItemID = SI.ItemID
    INNER JOIN PLSupplierAccount PLSA ON SIS.SupplierID = 
PLSA.PLSupplierAccountID
    INNER JOIN SYSCurrency SC ON PLSA.SYSCurrencyID = SC.SYSCurrencyID
    INNER JOIN ProductGroup PG ON PG.ProductGroupID = SI.ProductGroupID
    INNER JOIN StockItemPrice SIP ON SIP.ItemID = SI.ItemID
    INNER JOIN PriceBand PB ON PB.PriceBandID = SIP.PriceBandID
    INNER JOIN StockItemStatus SIStatus ON SIStatus.StockItemStatusID = 
SI.StockItemStatusID

результат -

| Item Code |...   |Selling Currency Std|
----------------------------
|        M1 |      |     €1.00 |
|        M1 |      |     £0.90 |
|        M2 |      |     €5.00 |
|        M2 |      |     £4.50 |
|        M3 |      |     €9.99 |

То, что я хочу, чтобы это было:

| Item Code |...   |Selling Currency Std €|Selling Currency Std £|
------------------------------------------------------------------
|        M1 |      |                €1.00 |                 £0.90|
|        M2 |      |                €5.00 |                 £4.50|
|        M3 |      |                €9.99 |                 £8.99|

1 Ответ

0 голосов
/ 28 июня 2019

Я бы посоветовал вам использовать что-то вроде sumif в excel, суммируйте значение только в том случае, если условие истинно.Если у вас нет дубликатов для (Элемент, Валюта), сумма будет складывать только 2 значения, одно всегда 0, а другое - фактический SalesPrice в определенной валюте.

; with ItemPriceList as
    (select
        SI.Code as [Item Code]
        , sum(iif(PB.PriceBandID = 1001, SIP.Price, 0)) as [Selling Currency Std €]
        , sum(iif(PB.PriceBandID = 129519, SIP.Price, 0)) as [Selling Currency Std £]
    from
        StockItem SI
        inner join StockItemPrice SIP on SIP.ItemID = SI.ItemID
            inner join PriceBand PB on PB.PriceBandID = SIP.PriceBandID
    group by
        SI.Code
    )
select
    IPL.[Item Code]
    , IPL.[Selling Currency Std €]
    , IPL.[Selling Currency Std £]
from
    ItemPriceList IPL
    --inner join the additional data for analysis

Да, и неБрат с дополнительной информацией, такой как [Код поставщика], [Код PG] и т. д., пока вы собираете Продажную цену, они могут быть добавлены позже, поэтому я использовал CTE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...