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

Откуда: Москва
Сообщений: 132
Есть табличка с полями m1,m2 ... m12
нужно 2 запроса:
1й - возвращает строки, где заполнено только одно из полей m№ (остальные NULL)
2й - возвращает строки, где заполнено более одного поля m№
Что бы не быть голословным, прилагаю скрипт создающий и заполняющий подобную табличку.
Надо только вписать запрос.

слабо?

К сообщению приложен файл (комбинаторика.sql - 663bytes) cкачать

Сообщение было отредактировано: 14 фев 17, 14:30
6 окт 09, 10:38    [7746426]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
Supra93
Member

Откуда:
Сообщений: 8174
select @@version
6 окт 09, 10:41    [7746451]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
select @@цена
6 окт 09, 10:47    [7746478]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
DECLARE @t TABLE ([m0] int,[m1] int, [m2] int) 

INSERT INTO @t([m0],[m1],[m2])
SELECT 1,NULL,NULL UNION ALL
SELECT 2,2,NULL UNION ALL
SELECT 3,3,3 UNION ALL
SELECT NULL,NULL,NULL 
SELECT 5,NULL,NULL UNION ALL

SELECT * FROM @t WHERE ((case WHEN ISNULL([m0],0) != 0 THEN 1 ELSE 0 END)  + 
					   (case WHEN ISNULL([m1],0) != 0 THEN 1 ELSE 0 END)  + 
					   (case WHEN ISNULL([m2],0) != 0 THEN 1 ELSE 0 END))  = 1

Дальше сам...

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.
6 окт 09, 10:52    [7746510]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
1
SELECT * FROM T WHERE
(
 SELECT COUNT(m) FROM
 (
            SELECT m1
  UNION ALL SELECT m2
  UNION ALL SELECT m3
  UNION ALL SELECT m4
  UNION ALL SELECT m5
  UNION ALL SELECT m6
  UNION ALL SELECT m7
  UNION ALL SELECT m8
  UNION ALL SELECT m9
  UNION ALL SELECT m10
  UNION ALL SELECT m11
  UNION ALL SELECT m12
 )U(m)
)=1;
2
SELECT * FROM T WHERE
(
 SELECT COUNT(m) FROM
 (
            SELECT m1
  UNION ALL SELECT m2
  UNION ALL SELECT m3
  UNION ALL SELECT m4
  UNION ALL SELECT m5
  UNION ALL SELECT m6
  UNION ALL SELECT m7
  UNION ALL SELECT m8
  UNION ALL SELECT m9
  UNION ALL SELECT m10
  UNION ALL SELECT m11
  UNION ALL SELECT m12
 )U(m)
)>1;
6 окт 09, 10:57    [7746557]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
DENIS_CHEL, Спасибо, чёт сам затупил. :)
iap, тоже спасибо, но я выбрал вариант DENIS_CHEL'а.

Сообщение было отредактировано: 14 фев 17, 14:30
6 окт 09, 11:09    [7746655]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
jsmirnoww
DENIS_CHEL, Спасибо, чёт сам затупил. :)
iap, тоже спасибо, но я выбрал вариант DENIS_CHEL'а.
Делаю музыкальные автоматы[/url]
Что ж теперь делать-то?
Пойду убьюсь об стену!

Сообщение было отредактировано: 14 фев 17, 14:30
6 окт 09, 11:19    [7746709]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Jsmirnoww не за что)))
jap стойте, в жизни еще так много положительного и интересного)))

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.
6 окт 09, 11:23    [7746739]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
iap, не надо, я всё прощу.
у тебя текста больше, не так наглядно, и думаю потормознее из-за union'oв будет. хотя ХЗ операции над полями в условиях тоже скорости не добавляют.
------------------------------------------------------------
Делаю музыкальные автоматы
6 окт 09, 11:50    [7746956]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Текста больше, потому что я для всех 12 полей написал (вместо "Дальше сам...").
Поскольку я версию сервера не знаю, то могу и короче для SQL2008:
SQL2008
SELECT * FROM T WHERE(SELECT COUNT(m)FROM(VALUES(m1),(m2),(m3),(m4),(m5),(m6),(m7),(m8),(m9),(m10),(m11),(m12))U(m))=1;
6 окт 09, 12:06    [7747107]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
iop? ты на С'ях пишешь? просто интересно
6 окт 09, 12:27    [7747270]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
я имею в виду клиентские приложения
------------------------------------------------------------
Делаю музыкальные автоматы
6 окт 09, 12:28    [7747280]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
~PJ
Member

Откуда: Украина
Сообщений: 394
iap,

коллега подскажи , а где можно для 2008 почитать . Очень интересная конструкция ;-)
6 окт 09, 12:29    [7747283]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
aek239
Member

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

Красиво.
6 окт 09, 12:32    [7747311]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
jsmirnoww
iop? ты на С'ях пишешь? просто интересно
Наверно, это ко мне вопрос?
Интересно, почему он возник?

Писал на Fortranе, PL/1, Basicе, Assemblerе, C, C++, Java, Pascal (Delphi).
Может, о чём-то ещё забыл.
6 окт 09, 12:34    [7747325]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
~PJ
iap,

коллега подскажи , а где можно для 2008 почитать . Очень интересная конструкция ;-)
1. BOL (я предпочитаю on-line)
2. Сам вот сообираюсь съездить за книгой
Ицик Бен-Ган
Microsoft SQL Server 2008. Основы T-SQL
Например, вот сюда: http://www.kniga.ru/search/?q=%C8%F6%E8%EA+%C1%E5%ED-%C3%E0%ED
6 окт 09, 12:49    [7747409]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
~PJ
Member

Откуда: Украина
Сообщений: 394
iap,

что то я сомневаюсь , что в той книге будут новые конструкции. Написано что основы...опять перепечатки старых версий втюхают.

может лучше сюда http://ebook30.com/database/database/92403/professional-microsoft-sql-server-2008-programming.html
6 окт 09, 13:02    [7747512]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
~PJ
iap,

что то я сомневаюсь , что в той книге будут новые конструкции. Написано что основы...опять перепечатки старых версий втюхают.

может лучше сюда http://ebook30.com/database/database/92403/professional-microsoft-sql-server-2008-programming.html
Не знаю - ведь не читал пока.
Просто мне нравятся все статьи этого автора и его стиль изложения.
Несколько раз покупал книги, которые вскоре хотелось просто выкинуть...
6 окт 09, 13:21    [7747675]     Ответить | Цитировать Сообщить модератору
 Re: Головоломка - нужен запрос t-sql  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
~PJ
iap,

что то я сомневаюсь , что в той книге будут новые конструкции. Написано что основы...опять перепечатки старых версий втюхают.

может лучше сюда http://ebook30.com/database/database/92403/professional-microsoft-sql-server-2008-programming.html
Не знаю - ведь не читал пока.
Просто мне нравятся все статьи этого автора и его стиль изложения.
Несколько раз покупал книги, которые вскоре хотелось просто выкинуть...
Последняя фраза двусмысленной получилась.
Я, конечно же, имел в виду не Ицика Бен-Гана.
Сейчас ведь модно стало "зарабатывать" лёгкие деньги,
просто издавая в виде книги шорткаты статей из какого-нибудь Helpа!
6 окт 09, 13:31    [7747768]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить