Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/86: Рейтинг темы: голосов - 86, средняя оценка - 4.59
 Аватар для Midian
604 / 386 / 198
Регистрация: 31.03.2013
Сообщений: 2,687

Вывести данные в одну строку

16.08.2014, 11:41. Показов 16832. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть таблица вида:
SQL
1
2
3
4
5
6
CREATE TABLE [ConsultantProduction]
(
    ConsultantKey BIGINT,
    ProductionMonthKey INT,
    WholeSale DECIMAL(19,2)
)
Заполненная данными:
SQL
1
2
3
4
5
6
7
8
9
10
INSERT INTO ConsultantProduction
(ConsultantKey, ProductionMonthKey, WholeSale)
VALUES
(123,       201303,         4518.00),                   
(123,       201304,         14256.00),                  
(123,       201305,         27780.50),                  
(123,       201306,         11544.50),                  
(123,       201307,         18062.00),                  
(123,       201308,         9416.00),                   
(123,       201309,         11027.50)
Необходимо сделать следующее:
вывести данные по продажам консультанта в одну строку в следующем виде:
consultantkey 201303 201304 201305 201306 201307 201308 201309
причем выводить объем продаж только больше 12000, если объем меньше, указать 0.
Помогите с решением, не знаю как выводить в строку данные
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.08.2014, 11:41
Ответы с готовыми решениями:

Как вывести одну строку n раз?
Можно ли вывести одну строку n раз? Если да, то как

Поделить одну строку на несколько
Добрый день! Мне необходимо поделить строку вида "aa bbb c" из таблицы 't1' на строки "aa", "bbb", "c",...

Выбрать одну строку из таблицы
Есть табличка accounts, она хранит информацию о счетах, у неё есть поля idaccount, name, balance, iduser Мне надо выбрать все счета...

5
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
16.08.2014, 13:40
T-SQL
1
2
3
4
5
6
7
8
9
SELECT ConsultantKey,
        CASE WHEN [201303] >  12000 THEN [201303] ELSE 0 END,
        CASE WHEN [201304] >  12000 THEN [201304] ELSE 0 END,
        CASE WHEN [201305] >  12000 THEN [201305] ELSE 0 END,
        CASE WHEN [201306] >  12000 THEN [201306] ELSE 0 END,
        CASE WHEN [201307] >  12000 THEN [201307] ELSE 0 END,
        CASE WHEN [201308] >  12000 THEN [201308] ELSE 0 END,
        CASE WHEN [201309] >  12000 THEN [201309] ELSE 0 END
    FROM ConsultantProduction PIVOT (SUM(WholeSale) FOR ProductionMonthKey IN ([201303], [201304], [201305], [201306], [201307], [201308], [201309])) T
0
 Аватар для Midian
604 / 386 / 198
Регистрация: 31.03.2013
Сообщений: 2,687
16.08.2014, 13:59  [ТС]
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE @keys AS NVARCHAR(MAX), @sales AS NVARCHAR(MAX), @key AS BIGINT, @sale AS DECIMAL(19, 2)
SET @keys = 'consultantkey '
DECLARE mycursor CURSOR FOR 
SELECT ProductionMonthKey, WholeSale FROM ConsultantProduction
OPEN mycursor
FETCH NEXT FROM mycursor INTO @key, @sale
WHILE @@FETCH_STATUS = 0
BEGIN
     IF (@sale > 12000) SET @keys += CONVERT(nvarchar(6), @key) + ' '
     ELSE SET @keys += CONVERT(nvarchar(6), @key) + ' ' + '0' + ' '
     FETCH NEXT FROM mycursor INTO @key, @sale
END 
CLOSE mycursor;
DEALLOCATE mycursor;
SELECT @keys
Добавлено через 1 минуту
kodv, ну а если бы этих чисел было больше? писать для каждого CASE наверное лишнее.
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
16.08.2014, 14:13
Лучший ответ Сообщение было отмечено Midian как решение

Решение

Навскидку:
T-SQL
1
2
3
4
5
6
7
8
9
select d.ConsultantKey, stuff(
  (select ','+case when c.WholeSale<12000 then '0' else c.ProductionMonthKey end
    from ConsultantProduction c
    where c.ConsultantKey=d.ConsultantKey
    order by c.ProductionMonthKey
    for xml path('')
    ),
  1,1,'')lst
from (select distinct ConsultantKey from ConsultantProduction) d
1
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
16.08.2014, 14:15
Цитата Сообщение от kodv Посмотреть сообщение
T-SQL
1
2
3
4
5
6
7
8
9
SELECT ConsultantKey,
        CASE WHEN [201303] >  12000 THEN [201303] ELSE 0 END,
        CASE WHEN [201304] >  12000 THEN [201304] ELSE 0 END,
        CASE WHEN [201305] >  12000 THEN [201305] ELSE 0 END,
        CASE WHEN [201306] >  12000 THEN [201306] ELSE 0 END,
        CASE WHEN [201307] >  12000 THEN [201307] ELSE 0 END,
        CASE WHEN [201308] >  12000 THEN [201308] ELSE 0 END,
        CASE WHEN [201309] >  12000 THEN [201309] ELSE 0 END
    FROM ConsultantProduction PIVOT (SUM(WholeSale) FOR ProductionMonthKey IN ([201303], [201304], [201305], [201306], [201307], [201308], [201309])) T
Зачем вам SQL? Может лучше переписать на бумагу нужные данные и сфотографировать?
0
 Аватар для Midian
604 / 386 / 198
Регистрация: 31.03.2013
Сообщений: 2,687
16.08.2014, 14:29  [ТС]
cygapb-007, Не работает ваш пример

Добавлено через 2 минуты
Вот так заработал
T-SQL
1
2
3
4
5
6
7
8
9
select d.ConsultantKey, stuff(
  (select case when c.WholeSale < 12000 then '0' else c.ProductionMonthKey end
    from ConsultantProduction c
    where c.ConsultantKey = d.ConsultantKey
    order by c.ProductionMonthKey
    for xml path('')
    ),
  1,1,'')lst
from (select distinct ConsultantKey from ConsultantProduction) d
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.08.2014, 14:29
Помогаю со студенческими работами здесь

Разбить одну строку на несколько
Ооочень нужна помощь!!!! Вот исходная таблица: ID Familia Ocenki 1 Иванов 2,4,3 2 Петров ...

Повторяющиеся строки запроса в одну строку
Есть запрос результатом которого является набор: Name; MAC; PC_serial; Memory Так как бывает несколько МАС-адресов то результат...

Вывод нескольких дат в одну строку
Здравствуйте! Подскажите, пожалуйста, есть условная база данных, в которой содержатся следующие таблицы: Книги (номер книги, название...

UNPIVOT таблица - представление данных в одну строку
Таблица не получается в одну строчку// Должно же быть: avg_ Минералка Полотенце Тапочки ...

PIVOT/UNPIVOT несколько значений из столбца в одну строку
Доброго времени суток! На форумах есть темы с подобным вопросом, где нужно значения из столбца поместить в одну строку в соответствии с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru