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

Есть выборка типа:

CREATE TABLE #T
(
OrderID INT,
ItemID INT,
Param1 BIT,
Param2 BIT
)

необходимо получить сгруппированную по OrderID выборку из вышеприведенной, причем если все значения Param1 в рамках одного OrderID равны 1 возвращать 1 иначе 0, аналогично для Param2. Результат:

CREATE TABLE #Result
(
OrderID INT UNIQUE,
Param1 BIT,
Param2 BIT
)
2 сен 05, 16:23    [1841810]     Ответить | Цитировать Сообщить модератору
 Re: F1 c запросом!  [new]
Verbovsky Innokenty
Member

Откуда: Moscow
Сообщений: 160
Как-нибудь так. Наверное можно и упростить
SELECT T.OrderID, Case Count1 WHEN 0 THEN 1 ELSE 0 END AS Param1, Case Count2 WHEN 0 THEN 1 ELSE 0 END AS Param2
FROM (SELECT DISTINCT OrderID FROM #T) T LEFT OUTER JOIN
(SELECT COUNT(*) AS Count1, OrderID FROM WHERE Param1 !=1 GROUP BY OrderID) T1 ON T.OrderID = T1.OrderID LEFT OUTER JOIN
(SELECT COUNT(*) AS Count2, OrderID FROM WHERE Param2 !=1 GROUP BY OrderID) T1 ON T.OrderID = T2.OrderID
2 сен 05, 16:37    [1841893]     Ответить | Цитировать Сообщить модератору
 Re: F1 c запросом!  [new]
Verbovsky Innokenty
Member

Откуда: Moscow
Сообщений: 160
Прошу прощения. Ошибочки есть

SELECT T.OrderID, Case ISNULL(Count1, 0) WHEN 0 THEN 1 ELSE 0 END AS Param1, Case ISNULL(Count2, 0) WHEN 0 THEN 1 ELSE 0 END AS Param2
FROM (SELECT DISTINCT OrderID FROM #T) T LEFT OUTER JOIN
(SELECT COUNT(*) AS Count1, OrderID FROM #T WHERE Param1 !=1 GROUP BY OrderID) T1 ON T.OrderID = T1.OrderID LEFT OUTER JOIN
(SELECT COUNT(*) AS Count2, OrderID FROM #T WHERE Param2 !=1 GROUP BY OrderID) T1 ON T.OrderID = T2.OrderID
2 сен 05, 16:39    [1841913]     Ответить | Цитировать Сообщить модератору
 Re: F1 c запросом!  [new]
#TempUser
Guest
а если исходная выборка получается тяжелым запром, то воспользоваться временной таблицей, так ?
2 сен 05, 16:41    [1841931]     Ответить | Цитировать Сообщить модератору
 Re: F1 c запросом!  [new]
Easygoing
Member

Откуда: SPB.RU
Сообщений: 560
Verbovsky Innokenty
Прошу прощения. Ошибочки есть

SELECT T.OrderID, Case ISNULL(Count1, 0) WHEN 0 THEN 1 ELSE 0 END AS Param1, Case ISNULL(Count2, 0) WHEN 0 THEN 1 ELSE 0 END AS Param2
FROM (SELECT DISTINCT OrderID FROM #T) T LEFT OUTER JOIN
(SELECT COUNT(*) AS Count1, OrderID FROM #T WHERE Param1 !=1 GROUP BY OrderID) T1 ON T.OrderID = T1.OrderID LEFT OUTER JOIN
(SELECT COUNT(*) AS Count2, OrderID FROM #T WHERE Param2 !=1 GROUP BY OrderID) T1 ON T.OrderID = T2.OrderID


Я бы использовал
EXISTS
2 сен 05, 16:51    [1842020]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить