SQL Select с часами в виде строк и различных зон в виде столбцов - PullRequest
0 голосов
/ 24 июня 2018

У меня есть запрос, по которому мне нужна помощь:

Select convert(char(2), IncTime, 108)  AS Hours, ISNULL(COUNT(IncNo),0) as 'Zone1'
From tblClosedCases
where IncDate between '01/01/2017' and '01/07/2017' and Zone = 'Zone1'
Group by convert(char(2), IncTime, 108)

tblClosedCases содержит, конечно, который я использую в качестве своих строк.У tblClosedCases также есть поле Zone.Текущая база данных, которую я использую, имеет значения Zone1, Zone2, Zone3, Zone4.

Значения поля Zone могут быть изменены пользователем на любое значение от Z1 до ABC123 и могут варьироваться от 2 до 20 зон.

Есть ли способ создать запрос на выборку, чтобы независимо от значения поля или количества полей я получал подобные результаты с именами столбцов в качестве значений, введенных клиентом?

Hours   Zone1   Zone2   Zone3
00       22      5       15
01       34      21      14
02       41      9       9

и т. Д.

Я знаю, что вам понадобится дополнительная информация, но я не уверен, что еще это может быть.

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 24 июня 2018

(должен быть комментарий, но у меня недостаточно репутации, чтобы комментировать)

Что вы подразумеваете под приведенным ниже утверждением - где Z1-ABC123 соответствуют вашему примеру, это названия зон? Будут ли разные таблицы иметь разное количество столбцов с разными именами? Если это так, вам понадобится динамический sql, и будет иметь значение, какой движок базы данных вы используете.

Суть того, что вы делаете в сводном запросе, и типичный способ сделать это, как

sum(case when zone='Zone 1' then Incno else 0 end) as 'Zone 1', 
sum(case when zone='Zone 2' then Incno else 0 end) as 'Zone 2'. . . 
 sum(case when zone='Zone N' then Incno else 0 end) as 'Zone N',

используя группировку, как вы показываете. Но это зависит от знания имен столбцов и их количества, когда вы пишете запрос.

Значения поля Зона могут быть изменены пользователем на любое значение от Z1 до ABC123 и могут варьироваться от 2 до 20 зон.

Если у вас будут разные столбцы из одного куска кода, это будет динамический sql, и вы должны добавить тег 'dynamic-sql' и тег для ваших продуктов баз данных

...