Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
LVeta
Member

Откуда:
Сообщений: 17
Есть запрос
select FST_NAME +' ' + left(SND_NAME,1) +' '+ left(FAM_NAME,1) "ФИО" , COUNT(cnt_pl) "Общее кол-во" , convert(varchar(10),count (bar_1))+' '+ convert(varchar(15),'(Один раз)')
+convert(varchar(10),count (bar_2))+' '
+ convert(varchar(15),'(Два раза)') + ' '
+ convert(varchar(10),count (bar_3))+' '
+ convert(varchar(15),'(Три раза)')
+ convert(varchar(10),count (bar_4))+' '
+ convert(varchar(15),'(Четыре раза)' ) "В том числе проходов"
from #remain_peopl
group by FST_NAME,SND_NAME,FAM_NAME


Вот информация, которая получается по запросу
ФИО Общее кол-во В том числе проходов
Амирянов Р С 78 75 (Один раз)3 (Два раза) 0 (Три раза)0 (Четыре раза)
Буцкевич М В 53 50 (Один раз)3 (Два раза) 0 (Три раза)0 (Четыре раза)
Вострецов А В 11 11 (Один раз)0 (Два раза) 0 (Три раза)0 (Четыре раза)
Горелова И В 106 101 (Один раз)5 (Два раза) 0 (Три раза)0 (Четыре раза)



Должен получится следующий результат

ФИО Общее кол-во "В том числе проходов"
Амирянов Р С 78 75 (Один раз) 3 (Два раза)
Буцкевич М В 53 50 (Один раз) 3 (Два раза)
Вострецов А В 11 11 (Один раз)
Горелова И В 106 101 (Один раз) 5 (Два раза)


Подскажите,пожалуйста, что нужно изменить в запросе
12 фев 16, 18:07    [18810730]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
LVeta, Добавить case when, например, и прописать - в каких случаях не выводить записи.
12 фев 16, 18:13    [18810748]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
LVeta
Member

Откуда:
Сообщений: 17
Я уже пробовала,но при внесении условия
((convert(varchar(10),count (bar_1))+' '+ case when convert(varchar(10),count(bar_1)) is not null OR convert(varchar(10),count (bar_5)) <>0 then convert(varchar(15),'(Один раз)') else ' ' end )+' '
+
convert(varchar(10),count (bar_2))+' '+case when convert(varchar(10),count (bar_2)) is not null OR convert(varchar(10),count (bar_5)) <>0 then convert(varchar(15),'(Два раза)') else ' ' end )+' '
+
(convert(varchar(10),count (bar_3))+' '+case when convert(varchar(10),count (bar_3)) is not null OR convert(varchar(10),count (bar_3)) <>0 then convert(varchar(15),'(Три раза)') else ' ' end )+' '
+
(convert(varchar(10),count (bar_4))+' '+case when convert(varchar(10),count (bar_4)) is not null OR convert(varchar(10),count (bar_4)) <>0 then convert(varchar(15),'(Четыре раза)') else ' ' end )+' '
+
(convert(varchar(10),count (bar_5))+' '+case when convert(varchar(10),count (bar_5)) is not null OR convert(varchar(10),count (bar_5)) <>0 then convert(varchar(15),'(Пять раз)') else ' ' end ) "В том числе проходов"

все равно выдает нули.
12 фев 16, 18:16    [18810752]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
LVeta, так вы тот кусок кода, который выдает нули, не поместили внутрь case. Поэтому и выдает.
12 фев 16, 18:25    [18810770]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
SELECT
      [ФИО] = FST_NAME + ' ' + LEFT(SND_NAME, 1) + ' ' + LEFT(FAM_NAME, 1)
    , [Общее кол-во] = COUNT(cnt_pl)
    , [В том числе проходов] = REPLACE(
       CASE WHEN COUNT(bar_1) = 0 THEN '' ELSE CAST(COUNT(bar_1) AS VARCHAR(10)) + ' ' + '(Один раз)' END + ' ' +
       CASE WHEN COUNT(bar_2) = 0 THEN '' ELSE CAST(COUNT(bar_2) AS VARCHAR(10)) + ' ' + '(Два раза)' END + ' ' +
       CASE WHEN COUNT(bar_3) = 0 THEN '' ELSE CAST(COUNT(bar_3) AS VARCHAR(10)) + ' ' + '(Три раза)' END + ' ' +
       CASE WHEN COUNT(bar_4) = 0 THEN '' ELSE CAST(COUNT(bar_4) AS VARCHAR(10)) + ' ' + '(Четыре раза)' END 
       , '  ', ' ')
FROM #remain_peopl
GROUP BY FST_NAME,
         SND_NAME,
         FAM_NAME
12 фев 16, 18:29    [18810790]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
LVeta
Member

Откуда:
Сообщений: 17
Спасибо большое за помощь.
12 фев 16, 18:32    [18810805]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Попробуйте еще такой вариант:

SELECT
      [ФИО] = FST_NAME + ' ' + LEFT(SND_NAME, 1) + ' ' + LEFT(FAM_NAME, 1)
    , [Общее кол-во] = COUNT(cnt_pl)
    , [В том числе проходов] = STUFF((
     	SELECT ' ' + CAST(a AS VARCHAR(10))  + ' ' + b
        FROM (
            VALUES
                (COUNT(bar_1), '(Один раз)'), 
                (COUNT(bar_2), '(Два раза)'), 
                (COUNT(bar_3), '(Три раза)'), 
                (COUNT(bar_4), '(Четыре раза)')
        ) t(a, b)
        WHERE a > 0
     	FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM #remain_peopl
GROUP BY FST_NAME,
         SND_NAME,
         FAM_NAME
12 фев 16, 18:35    [18810819]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Второй вариант работать будет если у Вас SQL Server 2008+

Небольшой трюк с многострочным VALUES будет лаконичнее в Вашем случае
12 фев 16, 18:38    [18810831]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
LVeta
Member

Откуда:
Сообщений: 17
AlanDenton, отработало также. Подскажите,пожалуйста, FOR XML PATH('') как я поняла помогает выравнять текст,как в в блокноте?
12 фев 16, 18:39    [18810836]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
LVeta
Member

Откуда:
Сообщений: 17
LVeta,спасибо. у меня как раз SQL Server 2008
12 фев 16, 18:40    [18810843]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Поскольку у SQL Server нет нормальной функциональности для конкатенации строк, то FOR XML PATH('') выступает "разумной" альтернативой.

Тут в примерах все написано:

https://habrahabr.ru/post/200120/
https://habrahabr.ru/post/197904/

Просто почитайте :)
Хороших выходных
12 фев 16, 18:42    [18810850]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
LVeta
Member

Откуда:
Сообщений: 17
AlanDenton,спасибо.с удовольствием почитаю
12 фев 16, 18:55    [18810887]     Ответить | Цитировать Сообщить модератору
 Re: Работа с условными операторам.Не получается убрать 0 строки из отчета  [new]
FOX75
Member

Откуда:
Сообщений: 29
AlanDenton
Поскольку у SQL Server нет нормальной функциональности для конкатенации строк, то FOR XML PATH('') выступает "разумной" альтернативой.

А самое главное можно соединить строку в нужном порядке добавив order by
15 фев 16, 12:40    [18817451]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить