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

Откуда:
Сообщений: 864
Приветствую.

Есть запрос:
SELECT ds,
           tabel,
           expected,
           fact,
           task
FROM tasks  


Как вывод сделать таким образом, чтобы когда попадаются несколько одинаковых между собой "Дата старта" (ds), то выводилась бы полностью только запись первой даты старта, а у второй записи и всех последующих (с той же, равной первой ds) выводились только поля fact и task?

Например:

Так выводится сейчас:
04.05.2017 8.0 0.8 12.0 Task1
04.05.2017 8.0 0.8 11.0 Task2
04.05.2017 8.0 0.8 13.0 Task3
04.05.2017 8.0 0.8 20.0 Task7
04.05.2017 8.0 0.8 11.0 Task9
04.05.2017 8.0 0.8 10.0 Task13
08.06.2017 8.0 0.8 1.0 Task36
09.06.2017 8.0 0.8 2.0 Task37
10.06.2017 8.0 0.8 5.0 Task38
10.06.2017 8.0 0.8 6.0 Task39
10.06.2017 8.0 0.8 8.0 Task40


Должно быть:
04.05.2017 8.0 0.8 12.0 Task1
11.0 Task2
13.0 Task3
20.0 Task7
11.0 Task9
10.0 Task13
08.06.2017 8.0 0.8 1.0 Task36
09.06.2017 8.0 0.8 2.0 Task37
10.06.2017 8.0 0.8 5.0 Task38
6.0 Task39
8.0 Task40
15 май 17, 13:09    [20481749]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20198
У Вас нет сортировки - а потому нет понятия "первая", "вторая" и пр.

PS. Задачи формирования отображения данных надо бы решать на клиенте, а не на сервере...
15 май 17, 13:13    [20481770]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
MAULER
Member

Откуда:
Сообщений: 864
Akina,

На самом деле, сортировка есть (забыл указать):
SELECT ds,
           tabel,
           expected,
           fact,
           task
FROM tasks 
15 май 17, 13:18    [20481786]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
MAULER
Member

Откуда:
Сообщений: 864
Akina
,

На самом деле, сортировка есть (забыл указать):
SELECT ds,
           tabel,
           expected,
           fact,
           task
FROM tasks
ORDER BY ds 
15 май 17, 13:18    [20481788]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
MAULER
Akina
,

На самом деле, сортировка есть (забыл указать):
SELECT ds,
           tabel,
           expected,
           fact,
           task
FROM tasks
ORDER BY ds 

Так ведь ds одинаковая, когда надо выводить только первую?
Тогда о каком упорядочении записи может идти речь?
15 май 17, 13:29    [20481820]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Если кое-как, то как-то так
SELECT ds=CASE ROW_NUMBER()OVER(PARTITION BY t.ds ORDER BY t.ds) WHEN 1 THEN t.ds END,
           tabel,
           expected,
           fact,
           task
FROM tasks t
ORDER BY t.ds, ds DESC;
15 май 17, 13:33    [20481830]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
roundabout
Member

Откуда:
Сообщений: 13
iap
MAULER
пропущено...
Так ведь ds одинаковая, когда надо выводить только первую?
Тогда о каком упорядочении записи может идти речь?

Да действительно, но если по условию, то
SELECT null, null, null
max(fact),
max(task)
FROM tasks
group by ds
having count(fact)=1
union
SELECT ds,
tabel,
expected,
min(fact),
min(task)
FROM tasks
group by ds, tabel, expected
having count(fact)>1
, но это в том случае если tabel, expected то же совпадают
15 май 17, 13:41    [20481856]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20198
MAULER, уточняю - при сортировке, когда каждая запись по ключу сортировки уникальна. Если же уникальности нет, то определён только порядок групп, а порядок записей в группе с совпадающим ключом сортировки по-прежнему не определён.
В Вашем случае таким ключом сортировки (ориентируюсь только на то, что размещено тут) могла бы быть, например, пара полей (ds, task).
15 май 17, 13:43    [20481867]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
rnk
Member

Откуда:
Сообщений: 126
with cte1 as (select *, convert(int,stuff(task,1,4,'')) as tasknum from tasks)
        ,cte2 as (select *,
            row_number() over (partition by ds,tabel,expected order by tasknum) as rownum
        from cte1)
select
    case rownum when 1 then ds else null end as ds,
    case rownum when 1 then tabel else null end as tabel,
    case rownum when 1 then expected else null end as expected,
    fact,task
    from cte2
15 май 17, 15:02    [20482070]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
MAULER,

такое отчетом рисуется - не выводить повторяющиеся значения.
15 май 17, 16:05    [20482291]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос..  [new]
MAULER
Member

Откуда:
Сообщений: 864
Владислав Колосов,

Да, я знаю.
Большое спасибо всем за помощь! Вроде бы сделал как надо.
16 май 17, 06:34    [20483376]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить