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

У меня есть таблица SQL с 9 столбцами:

TSTAMP  SYSTEM  MODE    BOARD   CHANNEL USED    TOTAL   BOARDID STATUS

«СИСТЕМА» содержит значение от 1 до 3.

Первый запрос будет искать Системное совпадение 1 и Количество каналов и Использованные макс. И Статус <> бесплатно.

  • Затем снова для соответствия системы 2 и т. Д.
  • Затем снова для соответствия системы 3

Я бы хотел (это использование по часам (24-часовой формат)) данных, размещенных в столбцах, а 24-часовой в столбце 1 - по строкам.

Я знаю, что могу выполнять каждый запрос по отдельности, но, будучи новичком в SQL, не уверен, какую команду вывести в таблицу результатов, как мне нравится.

Результат, который я пытаюсь получить, выглядит примерно так:

Telematic 1 Hour    Processed   MaxUsed Telematic 2 Hour    Processed   MaxUsed Telmatic 3  Hour    Processed   MaxUsed
    1   10  585 17  2   10  583 16  3   10  584 15
    1    4    8  1  2    4   14  2  3    4    8  1  

Извините за завертывание.

Я могу использовать UNION, но для этого достаточно создать 4 столбца. Не тот, который я ищу.

1 Ответ

0 голосов
/ 26 марта 2019

Не совсем понятно, откуда вы берете час. Но для разбиения на столбцы я бы использовал операторы Case следующим образом. Я не знаю ваши расчеты, но вместо t.Channel, введите вашу формулу. Если это необходимо суммировать, переключитесь с MAX на SUM. Замените t.Hour на таблицу, где вы получаете часы.

Если это не имеет смысла, опубликуйте свой запрос на объединение, и я приспособлюсь к случаям использования.

SELECT
t.Hour
MAX(CASE WHEN t.System=1 THEN t.Channel END) T1Channel,
MAX(CASE WHEN t.System=1 THEN t.Board END) T1Board,
MAX(CASE WHEN t.System=2 THEN t.Channel END) T2Channel,
MAX(CASE WHEN t.System=2 THEN t.Board END) T2Board,
MAX(CASE WHEN t.System=3 THEN t.Channel END) T3Channel,
MAX(CASE WHEN t.System=3 THEN t.Board END) T3Board
FROM PDWPeriod t
GROUP BY 
t.Hour

Новый запрос на основе вашего:

SELECT DATEPART(hh, TSTAMP) AS Hour, 
COUNT(CASE WHEN System=1 THEN CHANNEL END) Processed1, 
max(CASE WHEN System=1 THEN [USED] END)as MaxUsed1,
COUNT(CASE WHEN System=2 THEN CHANNEL END) Processed2, 
max(CASE WHEN System=2 THEN [USED] END)as MaxUsed2,
COUNT(CASE WHEN System=3 THEN CHANNEL END) Processed3, 
max(CASE WHEN System=3 THEN [USED] END)as MaxUsed3,
COUNT(CASE WHEN System=4 THEN CHANNEL END) Processed4, 
max(CASE WHEN System=4 THEN [USED] END)as MaxUsed4
FROM [PINELLASLAB].[dbo].[TelematicPhysicalLines] 
WHERE TSTAMP >= '2019-02-27' AND TSTAMP < '2019-02-28' 
AND STATUS <> 'free' 
GROUP BY DATEPART(dd, TSTAMP), DATEPART(hour, TSTAMP) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...