У меня есть задача, которая выглядит следующим образом:
- У меня есть база данных с таблицей - DressSizes
- У меня есть xml также с размерами платья.Этот xml передается в качестве параметра функции.
- Моя цель - получить данные из таблицы в соответствии с переданным xml.
OUTPUT:
- если моя таблица содержит размеры, присутствующие в xml, я должен выбрать наименьший общий размер.
- если моя таблица не содержит размеры, присутствующие в xml, я должен выбрать наименьший размериз таблицы.
- если я передал значение null в функцию 2nd, должно произойти.
У меня уже есть рабочий запрос, который выглядит следующим образом:
ALTER function [dbo].[DressAvialableSizez]
(
@DressID int,
@ListXml xml = NULL
)
RETURNS TABLE
AS
RETURN
(
WITH CTE_SizeFilter as
(
SELECT Xmldata.Element.value('.','varchar(5)') AS Sizes, S.SortIndex AS FSort, S.DressID
FROM @ListXml.nodes('/list/i') AS Xmldata (Element)
INNER JOIN DressesSizes AS S ON S.DressSize = Xmldata.Element.value('.','varchar(5)')
WHERE S.DressID = @DressID
)
SELECT TOP(1) F.Sizes, F.FSort, S.DressSize, S.SortIndex, S.DressID
FROM DressesSizes AS S
LEFT JOIN CTE_SizeFilter AS F ON S.DressSize = F.Sizes
WHERE S.DressID = @DressID AND S.DressSize = IIF( EXISTS (
SELECT F.Sizes
FROM DressesSizes AS S
INNER JOIN CTE_SizeFilter AS F ON S.DressSize = F.Sizes),
F.Sizes,
S.DressSize)
order by F.FSort, S.SortIndex
)
ПРОБЛЕМА:
Я показал свой код своему руководителю, но он / она продолжает говорить, что его можно упростить, и мне нужно думать в наборах.Я, кажется, изо всех сил пытаюсь понять, как «думать в сетах», и никакое прибегание к помощи не помогло.Так что я могу сделать, я потерян.