Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CASE WHEN & PARTITION BY / 4 сообщений из 4, страница 1 из 1
01.11.2021, 12:35
    #40108580
Ablaykhan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CASE WHEN & PARTITION BY
Здравствуйте, есть таблица [dbo].[TDSheet$]
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE [dbo].[TDSheet$](
	[ProductCode] [float] NULL,
	[HozOperation] [nvarchar](255) NULL,
	[DateInputOutput] [nvarchar](255) NULL
) ON [PRIMARY]
GO



ProductCodeHozOperationDateInputOutputaВвод1 октябряaВывод2 октябряbВвод25 сентябряbВывод20 сентябряcВывод3 октября cВвод15 августа

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

ProductCodeHozOperationDateInputOutputStatusaВвод1 октября НеактивенaВывод2 октября НеактивенbВвод25 сентября АктивенbВывод20 сентября АктивенcВывод3 октября НеактивенcВвод15 августа Неактивен

У меня получилось вывести максимальную дату по коду товара
Код: sql
1.
MAX([DateInputOutput]) OVER (PARTITION BY [ProductCode])

но дальше не могу добить логику запросом. Раньше у меня был готовый скрипт для этого запроса, но он случайным образом был удален. Теперь не могу вспомнить. Помню что точно использовал subquery и case-when. Подскажите кто знает. Заранее спасибо.
...
Рейтинг: 0 / 0
01.11.2021, 13:46
    #40108592
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CASE WHEN & PARTITION BY
Ablaykhan,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select prod_code, iif(operation = 'ввод', 'активный', 'неактивный') state
from table
inner join
(
select prod_code, max(date) maxdate
from table
group by prod_code
) t1 on table.prod_code = t1.prod_code and table.date=t1.maxdate
...
Рейтинг: 0 / 0
01.11.2021, 15:02
    #40108610
Ablaykhan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CASE WHEN & PARTITION BY
Владислав Колосов,
Я вроде все правильно поменял
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT [productcode]
	,iif(SUBSTRING([HozOperation], 1, 5) = 'ввод', 'активный', 'неактивный') STATE
FROM [dbo].[TDSheet$]
INNER JOIN (
	SELECT [productcode]
		,max([DateInputOutput]) maxdate
	FROM [dbo].[TDSheet$]
	GROUP BY [productcode]
	) t1 ON [dbo].[TDSheet$].[productcode] = t1.[productcode]
	AND [dbo].[TDSheet$].[DateInputOutput] = t1.maxdate



Но почему то ругается
Неоднозначное имя столбца "productcode".
...
Рейтинг: 0 / 0
01.11.2021, 15:13
    #40108614
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CASE WHEN & PARTITION BY
Ablaykhan,

да, надо же [TDSheet$] написать, чтобы было понятно - из какой таблицы столбец.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CASE WHEN & PARTITION BY / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]