2016-11-17 5 views
0

я имею временную таблицу с набором данныхIterate временной таблица в пакетах

----------------------------------------------------- 
| col1 | col2  | col3  | col4  | status| 
----------------------------------------------------- 
| a  | a12  | dd  | ff  | 1  | 
----------------------------------------------------- 
| b  | b43  | dd  | ff  | 2  | 
----------------------------------------------------- 
| c  | fe3  | dd  | ff  | 3  | 
----------------------------------------------------- 
| d  | fd2  | gg  | hh  | 1  | 
-----------------------------------------------------    
| e  | sf2  | gg  | hh  | 1  | 
----------------------------------------------------- 
| f  | vd2  | ii  | jj  | 3  | 
----------------------------------------------------- 
| g  | cd3  | ii  | jj  | 3  | 
----------------------------------------------------- 

мне нужно обработать в таблицу в партиях, чтобы выбрать некоторые из строк.

т.е.

Сначала рассмотрим строки с col3 = дд и COL4 = FF и выбрать только один строку (я есть алгоритм, чтобы выбрать эту строку), то рассмотрим строки с col3 = гг и COL4 = hh и выберите onse, затем рассмотрите строки с col3 = ii и col4 = jj и выберите одну строку.

Как я могу перебирать временную таблицу, чтобы выбрать подмножество строк и процессов. ??

Мне нужно получить одну строку из каждого подмножества (подмножество с одинаковыми col3 и col4) в зависимости от состояния столбца.

Ожидаемый результат: -


| col1 | col2  | col3  | col4  | status| 
----------------------------------------------------- 
| b  | b43  | dd  | ff  | 2  | 
-----------------------------------------------------  
| d  | fd2  | gg  | hh  | 1  | 
-----------------------------------------------------    
| f  | vd2  | ii  | jj  | 3  | 
----------------------------------------------------- 
+0

Не ясно намерения. Простой аргумент where в вашем запросе позволит вам получить подмножество данных в приведенной выше таблице, однако я не уверен, что это ваша цель. –

+0

Этот вопрос не имеет контекста. Кажется странным совершать несколько поездок в базу данных, когда вы можете просто заказать набор записей по вашему алгоритму, и вы можете проанализировать набор результатов в пользовательском интерфейсе или в логике backoffice. – xQbert

+0

Я не уверен в данных в col3 и col4 И число записей в моей временной таблице. вместо нескольких обращений к БД, собирает все данные в временную таблицу и пытается обработать временную таблицу. – Sahi

ответ

0

Это зависит от цели и базы данных двигателя.

  1. Если вы хотите перебирать и изменять данные в этой таблице вы можете использовать курсор, в то время как цикл, КТР, рекурсивное обновление ...
  2. Если вы хотите перебирать объекты (таблицы, базы данных), вы должны использовать Sytem Еогеасп на основе процедуры (например, sp_MSforeachdb).
  3. Если вы хотите получить какое-то значение и только выбрать что-то из следующей таблицы, вы должны использовать функцию.
  4. Если вы хотите итерационное решение, вы можете использовать курсор или цикл while. Но попробуйте переосмыслить свой план и попробуйте использовать комплексное решение (конечно, если это возможно).
0

Вы можете добиться этого с оконными функциями, разбиения на любой набор столбцов вы хотите отдельную строку для:

declare @t table (ID int, TextValue nvarchar(10)); 
insert into @t values(1,'a'),(2,'a'),(3,'a'),(4,'b'),(5,'b'),(6,'b'),(7,'c'),(8,'c'),(9,'c'); 

select ID 
     ,TextValue 
from(select ID 
      ,TextValue 
      ,row_number() over (partition by TextValue order by ID) as rn 
    from @t 
) a 
where rn = 1; 
Смежные вопросы