Как выбрать отдельные значения в столбце, а затем отобразить сумму производного столбца? - PullRequest
0 голосов
/ 10 мая 2019

Для домашнего задания мне нужно написать запрос, который отображает различные типы инвентаря (кофе, чай или NULL) и сумму их общей стоимости (инвентарь * цена), поэтому после таблицы должно быть 3х2. запрос запущен. Полный вопрос: «Создайте новый запрос под названием CoffeeTotal.sql, который будет суммировать цену каждого типа элемента (кофе и чай). Используйте оператор CASE и отобразите результаты по типу элемента. СОГЛАСИТЕ« Общая стоимость »как «$». "

Я знаю, что результат должен быть:

Coffee | $1242571.75
Tea    | $211716.70
NULL   | $1455288.45

Но я изо всех сил пытаюсь написать запрос. В настоящее время моя попытка:

SELECT DISTINCT ItemType AS "Product Type",
    SUM(CASE WHEN ItemType = 'Coffee' THEN Price*OnHand),
    SUM(CASE WHEN ItemType = 'Tea' THEN Price*OnHand),
    SUM(CASE WHEN ISNULL(ItemType) THEN Price*OnHand)
FROM Inventory

Но я на 100% уверен, что этот код неправильный, и я совершенно не знаю, как добавить «$» на этом этапе. Заранее спасибо.

1 Ответ

1 голос
/ 10 мая 2019

Один из возможных подходов, используя GROUP BY с CASE и FORMAT () (если вы используете SQL Server 2012 +):

Ввод:

CREATE TABLE #Inventory (
    ItemType varchar(10),
    Price numeric(10, 2),
    OnHand int
)
INSERT INTO #Inventory
    (ItemType, Price, OnHand)
VALUES
    ('Coffee', 1.02, 21),
    ('Coffee', 1.02, 22),
    ('Coffee', 1.02, 23),
    ('Coffee', 1.02, 24),
    ('Tea', 2.01, 11),
    ('Tea', 2.01, 12),
    ('Drink', 3.03, 1),
    (NULL, 13.13, 3)

T-SQL:

SELECT 
    CASE 
        WHEN ItemType <> 'Coffee' AND ItemType <> 'Tea' THEN NULL
        ELSE ItemType
    END AS ItemType,
    FORMAT(SUM(Price * OnHand), '$0.00') AS Total
FROM #Inventory
GROUP BY 
    CASE 
        WHEN ItemType <> 'Coffee' AND ItemType <> 'Tea' THEN NULL
        ELSE ItemType
    END

Вывод:

ItemType    Total
NULL        $42,42
Coffee      $91,80
Tea         $46,23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...