powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CASE WHEN & PARTITION BY
4 сообщений из 4, страница 1 из 1
CASE WHEN & PARTITION BY
    #40108580
Ablaykhan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, есть таблица [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
CASE WHEN & PARTITION BY
    #40108592
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
CASE WHEN & PARTITION BY
    #40108610
Ablaykhan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Я вроде все правильно поменял
Код: 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
CASE WHEN & PARTITION BY
    #40108614
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ablaykhan,

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


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