我该如何过滤出一个表,该表只包含一个列的值(无关紧要是哪个)。
用于创建以下内容的SQL查询如下所示:
SELECT DISTINCT
S.Id AS ReferenceID,
M.NewModuleID AS ModuleId,
SM.Compulsory
FROM
Struct S
INNER JOIN
StructModule SM
ON SM.StructId = S.Id
INNER JOIN
ModuleMap M
ON M.StructId = S.Id
AND SM.ModuleId = M.OldModuleId
但是,这不会以我需要的方式返回值。返回表如下所示:
ReferenceID NewModuleID Compulsory
1 100 1
1 210 0
2 251 1
2 251 0
但是,我希望SQL查询返回NewModuleID字段的唯一值。理想情况下,首先出现一个值
上表的相关列如下:
Struct:
ID (INT)
StructModule:
ID (INT)
StructID (INT)
ModuleID (INT)
Compulsory (BIT)
ModuleMap:
ID (INT)
OldModuleId (INT)
StructID (INT)
NewModuleID (INT)
答案 0 :(得分:1)
您的问题不是很清楚,但是在阅读了以下声明之后。
但是我希望SQL查询返回唯一的值 NewModuleID字段。理想情况下采用值的首次出现
我可以猜到您正在寻找类似以下查询的内容。
SELECT * FROM
(
SELECT
S.Id AS ReferenceID,
M.NewModuleID AS ModuleId,
SM.Compulsory ,
ROW_NUMBER() OVER(PARTITION BY S.ID, M.NewModuleID ORDER BY M.NewModuleID) RN
FROM
Struct S
INNER JOIN
StructModule SM
ON SM.StructId = S.Id
INNER JOIN
ModuleMap M
ON M.StructId = S.Id
AND SM.ModuleId = M.OldModuleId
)T
WHERE RN=1
注意:如果使用RN=1
条件,则不需要区分。