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

Откуда: VRN
Сообщений: 192
добрый вечер господа!!

подскажите пожалуйста по возникшим 2м вопросам

1. мне необходимо преобразовать результат запроса:
USE OTK_WORK
------------
DECLARE @NUMPART VARCHAR(20)
SET @NUMPART = '2013::CBCL|TEST'
------------
SELECT * 
INTO #TBL
FROM RESULTS  WHERE IDCEH = 91 AND IDJOUR=91 AND IDPROD=315 
                           AND NUMPART = @NUMPART 
------------
SELECT * FROM #TBL
------------
DROP TABLE #TBL


результат на скрине, суть вопроса заключается в том чтобы получить результат представленный на том же скрине, при чем поле IDOPIT всегда принимает следующие значения (94,93,85,174,125), группировку необходимо делать по полю NUMMASH , следующий набор данных будет иметь NUMMASH = NUMMASH +1 и т.д.

В данный момент я делаю море выборок к временной строки и это крайне нерационально.

2. есть ли возможность в конструкции данного вида:
IF EXISTS (SELECT * FROM RESULTS WHERE IDCEH = 91 AND IDJOUR=91 AND IDPROD=315 
                                              AND IDOPIT = @IDOPIT AND NUMPART = @NUMPART)

сразу получить ID строки (всегда вернет 1 строку если существует), что бы повторно не выполнять данный запрос???

К сообщению приложен файл. Размер - 107Kb
23 авг 13, 21:20    [14749713]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Glory
Member

Откуда:
Сообщений: 104760
SELECT TOP 1 ...
23 авг 13, 21:23    [14749718]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
неееее

select top 1 * from ... это не то, сейчас в Painte нарисую свой вопрос
23 авг 13, 21:25    [14749726]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Glory
Member

Откуда:
Сообщений: 104760
DmitryVT
сейчас в Painte нарисую свой вопрос

Т.е. словами его не выразить что ли ?
23 авг 13, 21:37    [14749759]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
GLORY пока сложновато, сразу надо было такой пример выкладывать

исходная таблица с лева ее необходимо группировать по полю С при этом поле A может принимать только три значения,(которые в дальнейшем нужно разбить на новые поля)

К сообщению приложен файл. Размер - 49Kb
23 авг 13, 21:44    [14749781]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
Вроде бы придумал ))

Select distinct C 
Into #C  from TABLE
--------------------------
SELECT C.C,T1.ID,T1.A,T1B, T2.ID,T2.A,T2B, T3.ID,T3.A,T3B
FROM #C AS C INNER JOIN TABLE AS T1
                          ON C.C=T1.C and T1.A=94
                          INNER JOIN TABLE AS T2
                          ON C.C=T1.C and T1.A=93
                          INNER JOIN TABLE AS T3
                          ON C.C=T1.C and T1.A=85
Drop table #C
23 авг 13, 22:14    [14749870]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
Ой там выше опечатка, но суть понятна, а со вторым вопросом ума не хватает

получить ID строки (если есть) в теле условия:

IF EXISTS (SELECT * FROM RESULTS WHERE IDCEH = 91 AND IDJOUR=91 AND IDPROD=315 
                                              AND IDOPIT = @IDOPIT AND NUMPART = @NUMPART)


Это вообще возможно??
23 авг 13, 22:17    [14749888]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
пимпиец
Guest
делайте
if exists (select 1 from table where f=f)

вместо вашей *
24 авг 13, 00:24    [14750378]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
пимпиец
Guest
а вообще я вашего ни вопроса ни запроса не понял.
вам что нужно то? проверить есть ли запись и если она есть то выдавать ее ид?

ну так и делайте вывод этого ида.

либо присваивайте значение переменной и потом проверяйте на нулл

сформулируйте вопрос
24 авг 13, 00:29    [14750385]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
Суть заключается в следующем:
IF EXISTS (SELECT ID FROM RESULTS WHERE IDCEH = 91 AND IDJOUR=91 AND IDPROD=315 
                                              AND IDOPIT = @IDOPIT AND NUMPART = @NUMPART) 
BEGIN
 SET @ID =  (SELECT ID FROM RESULTS WHERE IDCEH = 91 AND IDJOUR=91 AND IDPROD=315 
                                              AND IDOPIT = @IDOPIT AND NUMPART = @NUMPART) 
 UPDATE .....  WHERE ID = @ID
END
ELSE 
BEGIN
INSERT ......
END


хочется не громаздить кода, да и мне интересно возможно ли реализовать некое присвоение переменной @ID полученный результат внутри этого условия:

IF EXISTS (SELECT ID FROM RESULTS WHERE IDCEH = 91 AND IDJOUR=91 AND IDPROD=315
AND IDOPIT = @IDOPIT AND NUMPART = @NUMPART)
24 авг 13, 09:33    [14750647]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
DmitryVT
SET @ID =  (SELECT ID FROM ...
IF @ID IS NOT NULL
...
24 авг 13, 09:50    [14750662]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
спасибо за советы тема закрыта.
24 авг 13, 09:57    [14750667]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
пимпиец
делайте
if exists (select 1 from table where f=f)

вместо вашей *
Это почему же?
24 авг 13, 09:58    [14750669]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить