这里我有一个表格来验证数据。
CREATE VIEW [VendorView]
AS
WITH Vendors AS
(
SELECT
ISNULL(ROW_NUMBER() OVER (ORDER BY [VendorCode],[VendorName]), 0) AS RN, *
FROM [A0112].[Vendor]
)
SELECT
CASE WHEN [VendorCode] IS NULL OR [VendorCode] =''
THEN 'ERROR'
ELSE [VendorCode]
END AS [VendorCode]
,[VendorName]
,[VendorCategory]
,[Address]
,[Region]
,[State]
,[Province]
,[Country]
,[Contact]
,[VendorStatus]
,[VendorRating]
,[AuthorizationGroup]
,[Currency]
,[RecordDateTime]
,[ErrorStatus]
FROM
Vendors
WHERE
RN IN (SELECT MAX(RN) MAX_RN
FROM Vendors
GROUP BY
[VendorCode], [VendorName], [VendorCategory],
[Address], [Region], [State], [Province],
[Country], [Contact], [VendorStatus],
[VendorRating], [AuthorizationGroup], [Currency])
在我看来,您可以看到我检查 VendorCode是空还是空并返回 ERROR 而不是其值。
这样的一个或多个Case语句可以验证表的数据。
我需要的是,如果任何列包含值错误,我需要向Invalid Record
列添加常见错误ErrorStatus
。
因为当我使用此视图时,我不希望有多个条件来检查我的Where子句中的错误列,如下所示
SELECT *
FROM [VendorView]
WHERE VendorCode <> 'ERROR'
AND [VendorName] <> 'ERROR'
我想要......
SELECT * FROM [VendorView]
WHERE [ErrorStatus]<> 'Invalid Record'
答案 0 :(得分:2)
我认为有两种方法可以做到这一点。第一种方法是使用case
列的ErrorStatus
语句,如下所示
CASE WHEN [VendorCode] IS NULL OR [VendorCode] =''
OR [VendorName] IS NULL OR [VendorName] = ''
THEN 'Invalid Record'
ELSE 'Valid Record'
END as ErrorStatus
第二种方法是在视图中使用以下条件(但我不确定它是否适合你)
SELECT *
FROM [VendorView]
WHERE 'Invalid Record' in ([VendorCode],[VendorName])