Member 13842073 Ответов: 2

Пожалуйста, объясните следующий код:


Я не могу получить значение функции выбора и grouping_id в запросе.
Это база данных Adventures в sql server.

Конкретно,

CHOOSE (1+ GROUPING_ID(a.CountryRegion) + GROUPING_ID(a.StateProvince) + GROUPING_ID(a.City),
        a.City + ' Subtotal', a.StateProvince + ' Subtotal',
        a.CountryRegion + ' Subtotal', 'Total'


Мой вопрос касается предложения choose. Согласно синтаксису , это так
CHOOSE ( index, val_1 val_2 [, val_n ] )


Кроме того, "grouping_id" должен содержать весь список столбцов, которые находятся в "GROUP BY".

Если бы вы могли сослаться хотя бы на какую-нибудь статью о группировке id.

Я сделал свой поиск в google. То, что я понял, кажется недостаточным.

Спасибо за помощь

Что я уже пробовал:

SELECT a.CountryRegion, a.StateProvince, a.City,
CHOOSE (1+ GROUPING_ID(a.CountryRegion) + GROUPING_ID(a.StateProvince) + GROUPING_ID(a.City),
        a.City + ' Subtotal', a.StateProvince + ' Subtotal',
        a.CountryRegion + ' Subtotal', 'Total') AS Level,
SUM(soh.TotalDue) AS Revenue
FROM SalesLT.Address AS a
JOIN SalesLT.CustomerAddress AS ca
ON a.AddressID = ca.AddressID
JOIN SalesLT.Customer AS c
ON ca.CustomerID = c.CustomerID
JOIN SalesLT.SalesOrderHeader as soh
ON c.CustomerID = soh.CustomerID
GROUP BY ROLLUP(a.CountryRegion, a.StateProvince, a.City)
ORDER BY a.CountryRegion, a.StateProvince, a.City;

Member 13842073

Да, я это читал. Все еще не ясно

2 Ответов

Рейтинг:
13

Richard Deeming

Цитата:
"grouping_id" должен содержать весь список столбцов, которые находятся в "GROUP BY"

Прочтите документацию еще раз:
Каждый аргумент GROUPING_ID должен быть один из элементов группа по списку.

Производится группирование a.CountryRegion, a.StateProvince, и a.City, таким образом, каждое из этих имен столбцов является допустимым аргументом для GROUPING_ID статистическая функция.

Цитата:
Мой вопрос касается предложения choose. Согласно синтаксису , это так
CHOOSE ( index, val_1 val_2 [, val_n ] )

И это именно то, что у вас есть:
CHOOSE (
    /* index = */  1 + GROUPING_ID(a.CountryRegion) + GROUPING_ID(a.StateProvince) + GROUPING_ID(a.City),
    /* val_1 = */  a.City + ' Subtotal',
    /* val_2 = */  a.StateProvince + ' Subtotal',
    /* val_3 = */  a.CountryRegion + ' Subtotal', 
    /* val_4 = */  'Total'
)


Чтобы правильно понять запрос, вам также необходимо понять ROLLUP пункт:
SQL SERVER - введение в предложение Rollup - SQL Authority with Pinal Dave[^]


Рейтинг:
1

OriginalGriff

Нет.
Вы хоть представляете, как много работы по построчному объяснению кода?
Каждая строка нуждается в пояснении! Например:

int next = r.Next();

Создайте новую переменную под названием "next", которая может содержать целочисленное значение. Из ранее объявленного случайного экземпляра "r" вызовите метод "Next", чтобы получить новое случайное число, и назначьте его переменной "next".

Можете себе представить, сколько времени нам потребуется, чтобы объяснить даже такой очень короткий фрагмент кода, как ваш пример, строка за строкой?

Нет, этого не произойдет. Если у вас есть конкретная проблема, то задайте вопрос о ней. Но сначала подумайте - хотите ли вы сесть на 45 минут и напечатать построчное описание без веской причины?