在sql中循环以查找表中的行数

时间:2012-04-10 00:05:04

标签: sql sql-server sql-server-2008 tsql

我有一个表A,它可以为DES和ARR列提供不同的值(不同的行数),例如

DES  ARR

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

OR

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

如果我不断更改RN编号(RN = 1,2,3),上面的查询给出了DES和ARR的值, 但是我不知道表中实际填充了多少行,所以我不能使用RN 有效地从每一行获取DES和ARR值

如何找出使用tSQL查询表A中有多少行在DES和ARR列中有值? 在找到其中包含DES和ARR值的行总数后, 如何从DES和ARR填充的每一行中找到DES和ARR的值 值? 我可以更改上面的查询以生成我需要的结果吗?

3 个答案:

答案 0 :(得分:0)

您的问题令人困惑,但您是否尝试过使用count(1)或count(*)来查找表格中的行数。

如果要查找表中的非空值数,请使用

select count(column_name)
  from table_name

这应该是你想要的。

答案 1 :(得分: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 

答案 2 :(得分:0)

您的问题很混乱,但我可以根据您的说法提出一些问题:

  

如何找出使用tSQL查询表A中有多少行在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