Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Разбивка стобца в выводе


Автор: Colloseum 31.5.2007, 13:55
Даже не знаю как толком озаглавить.
Таблица следующая в MS SQL2K
-------------------------------------
DTSC1 | KTSC1 | SUM_
-------------------------------------
       6D     |           |  200
       ZD     |           |  100
                |   6D    |  300
                |   6D    |  6500
       6D     |           |  45200
                |     LP   |  45200
-------------------------------------

Мне нужно вывести такую строку:

DTSC1 | KTSC1 | SUM_DTS | SUM_KTS
       6D     |   6D    |  45400     |  6900

Т.е. необходимо вычислить все значения которым соответствует 
DTSC1 = '    6D' и вывести SUM_DTS и соответственно где KTSC1 = '    6D' в поле SUM_KTS

Следующий запрос только по одному критерию вычисляет. Как к нему прикрутить необходимую функциональность.

 
Код

SELECT     SUM(_1SENTRY.SUM_) AS AmountLeft
FROM         _1SENTRY
WHERE     (_1SENTRY.DATE_TIME_DOCID BETWEEN '20020101%' AND '20060131%') AND (_1SENTRY.DTSC1 = '    6D')


Автор: TicTak 31.5.2007, 14:48
Код

SELECT SUM (DECODE (_1SENTRY.dtsc1, '    6D', _1SENTRY.sum_, 0)) AS amountdtsc1,
       SUM (DECODE (_1SENTRY.ktsc1, '    6D', _1SENTRY.sum_, 0)) AS amountktsc1
  FROM _1SENTRY
 WHERE (_1SENTRY.date_time_docid BETWEEN '20020101%' AND '20060131%')
   AND (_1SENTRY.dtsc1 = '    6D' OR _1SENTRY.ktsc1 = '    6D')


Автор: Colloseum 31.5.2007, 15:36
A DECODE() Это чего?
MS SQL Query Browser Выдает: Unrecognized function name.

Добавлено через 9 минут и 44 секунды
Немного поискал, пишут что DECODE это оракловкая функция (если я прав), в MSSQL пользуйте CASE только вот CASE вроде в Query Browser пользовать нельзя. Как быть.

Автор: TicTak 31.5.2007, 16:28
Извини, думал decode - является стандартом SQL. 
Опять же не буду уверен насчёт MS SQL, но в оракле катит следующее:
Код

SELECT SUM (CASE
               WHEN _1SENTRY.dtsc1 = '    6D'
                  THEN _1SENTRY.sum_
               ELSE 0
            END) AS amountdtsc1,
       SUM (CASE
               WHEN _1SENTRY.ktsc1 = '    6D'
                  THEN _1SENTRY.sum_
               ELSE 0
            END) AS amountktsc1
  FROM _1SENTRY                                                         
 WHERE (_1SENTRY.date_time_docid BETWEEN '20020101%' AND '20060131%')
   AND (_1SENTRY.dtsc1 = '    6D' OR _1SENTRY.ktsc1 = '    6D')

Попробуй, может поможет. Но смысл такой - выбираеш данные, которые удолетворяют параметрам в обоих столбцах, и уже при суммировании отбрасываеш ненужную сумму.

Автор: Colloseum 31.5.2007, 16:36
Респект работает как надо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)