2012-04-10 5 views
-1

У меня есть таблица А, который может иметь разные значения (разное число строк) для DES и ARR столбцов, как, например,Циклы в TSQL, чтобы узнать количество строк в таблице

DES ARR 

D B 
C E 
U M 
R D     (values in 4 rows) 

ИЛИ

DES ARR 

E M 
G H     (values in only 2 rows) 

Я написал этот запрос написанный ниже

declare @A varchar(500), 
declare @B varchar(500); 
With B as (
Select DES as D, 
row number() partition over (Order by C) as RN 
ARR as AR 
from A) 
Select @A = D, 
     @B = AR 
from B 
where RN = 1 

запрос выше дает мне значения для DES и ARR, если я постоянно менять номер RN (RN = 1, 2,3), , но я не знаю, сколько строк фактически заполняется в таблице, поэтому я не могу использовать RN эффективно, чтобы получить значение DES и ARR из каждой строки

Как я могу найти используя запрос tSQL, сколько строк в таблице A имеют значения в столбцах DES и ARR? После определения общего количества строк, которые имеют значения DES и ARR в нем, Как я могу найти значение DES и ARR из каждой строки, заполненной значениями DES и ARR ? Могу ли я изменить свой запрос выше, чтобы получить результаты, которые мне нужны?

+2

erm? что? ...... –

+1

Почему вы пытаетесь получить доступ к значениям в цикле? Разве нет никакой другой возможности делать то, что вы хотите, без использования цикла? Если вы подробно расскажете о том, что вы собираетесь делать со значениями в цикле, мы могли бы придумать лучшую альтернативу.SQL - это инструмент, который лучше всего работает, когда используется для работы с данными * в наборах *, а не по строкам. –

ответ

0

ваш вопрос запутан, но вы попытались использовать count (1) или count (*), чтобы найти количество строк в таблице.

Если вы хотите узнать количество ненулевых значений в таблице используйте

select count(column_name) 
    from table_name 

Это должно дать то, что вы ищете.

+0

Общее количество отсчетов равно общему количеству строк. Как я могу обходить назад от самого высокого счета и находить значения данных в столбцах ARR и DES для каждой строки? От наивысшего номера счета до наименьшего номера счета. Любой общий SQL-запрос, который работает для любого количества счетчиков? – user680865

+0

Общее количество отсчетов равно общему количеству строк. Как я могу обходить назад от самого высокого счета и находить значения данных в столбцах ARR и DES для каждой строки? От наивысшего номера счета до наименьшего номера счета (самый низкий будет 1). Любой общий SQL-запрос, который работает для любого количества count (от самого высокого до самого низкого) и выводит значения данных в каждом ряду ARR и DES? – user680865

0

Является ли подсчет важным или просто обрабатывает значения в каждой строке?

Считаете ли вы использование курсора?

DECLARE @A varchar(500), @B varchar(500) 
DECLARE db_cursor CURSOR FOR 
SELECT DES, ARR 
FROM A 
ORDER BY C 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @A, @B 

WHILE @@FETCH_STATUS = 0 
BEGIN 
     -- Do whatever you want with @A and @B Here 

     FETCH NEXT FROM db_cursor INTO @A, @B 
END 

CLOSE db_cursor 
DEALLOCATE db_cursor 
+0

Конечно, обработка значений в каждой строке - это то, что мне нужно. Моя проблема заключается в том, что количество строк или количество строк может меняться в любое время, когда пользователь добавляет или удаляет значения. И я должен обрабатывать значения ARR и DES в зависимости от количества строк. Поэтому автоматически сначала найдите количество строк, а затем обработайте значения ARR и DES из каждой строки. – user680865

+0

Почему это автоматический? Курсор вернет все из них, сколько бы то ни было, прямо сейчас. Почему вы настаиваете на том, что вам нужно знать номер? Будете ли вы использовать этот номер для чего-то? – GilM

+0

Кроме того, вы никогда не говорили, что вы собираетесь делать с @A и @B в цикле. Если вы планируете делать что-то вроде обновления или вставки с каждым набором значений, вы можете полностью избежать цикла; что было бы предпочтительнее. – GilM

0

Ваш вопрос сбивает с толку, но я могу предложить несколько запросов, основанных на том, что вы говорите:

Как я могу узнать с помощью TSQL запроса, что, сколько строк в таблице А действительно есть значения в столбцах DES и ARR?

Попробуйте это:

SELECT COUNT(*) AS num_rows 
FROM A 
WHERE DES IS NOT NULL AND ARR IS NOT NULL 

Тогда вы спросили:

После выяснения общего количества строк, которые действительно имеют значение DES и ARR в нем, как я могу найти значение DES и ARR из каждой строки, заполненной значениями DES и ARR?

Это вы что искали?

SELECT * FROM A 
WHERE DES IS NOT NULL AND ARR IS NOT NULL 
+0

Ваш первый запрос - это то, что мне нужно, поскольку оно дает мне счет. Второй запрос - это не то, что я хочу. Вместо этого мне нравится создавать цикл из count 1 для подсчета числа, которое я нахожу в вашем первом запросе (цикл от самого низкого до максимального), и используя этот цикл, автоматически генерирует значения из каждой строки. Например, когда count = 2 затем генерирует значения ARR и DES из строки номер 2 и так далее, пока вы не достигнете максимального количества отсчетов и контуров цикла – user680865

+0

Что вы имеете в виду «когда count = 2 затем генерирует значения ARR и DES из строки номер 2"? Как вы будете генерировать ценности? Вы можете сделать это с помощью курсора, как предположил GilM. Но в зависимости от того, как вы вычисляете значения, может потребоваться простой запрос 'UPDATE'. – bfavaretto

Смежные вопросы