在T-SQL中遍历查询的行?

时间:2018-08-08 07:56:42

标签: sql sql-server-2008 tsql

我有以下T-SQL脚本:

5

我想制作一个脚本,将第一列中的每个字符串与第二列中的每个字符串进行比较。

问题是,我不知道如何遍历每一行并采用单独的字符串值。 上面的代码仅显示查询结果中的第一个值。

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

要比较一列中的所有值和另一列中的所有值,您不需要游标,只需进行简单的连接即可完成工作-由于您既没有提供示例数据,也没有期望的结果,我不得不我自己的:

创建并填充示例表(在您将来的问题中为我们保存此步骤)

CREATE TABLE MyTable 
(
    Id int identity(1,1),
    Name1 char(3),
    Name2 char(3)
)

INSERT INTO MyTable (Name1, Name2) VALUES
('abc','def'),('zyx','abc'),
('ghi','jkl'),('yza','ghi'),
('mno','pqr'),('nml','mno'),('pqr','qpo'),
('stu','vwx'),('wvu','tsr'),('kji','hgf')

查询:

SELECT T1.Id, T1.Name1, T1.Name2, T2.Id, T2.Name1, T2.Name2
FROM MyTable T1
JOIN MyTable T2 ON T1.Name1 = T2.Name2

结果:

Id  Name1   Name2   Id  Name1   Name2
1   abc     def     2   zyx     abc
3   ghi     jkl     4   yza     ghi
5   mno     pqr     6   nml     mno
7   pqr     qpo     5   mno     pqr

答案 1 :(得分:0)

您可能不想使用游标。

您的列是否在同一张表中?如果是这样,那么就这么简单;

-- Show All rows with [DIFFERENT] Name and Name2 fields
SELECT 
    Name,
    Name2
FROM [MyDB].[dbo].[MyTable]
WHERE 
    Name <> Name2

-- Show All rows with [SAME] Name and Name2 fields
SELECT 
    Name,
    Name2
FROM [MyDB].[dbo].[MyTable]
WHERE 
    Name = Name2

否则,您将需要发布表定义和列名以获得更具体的示例