此问题与类似问题which I came across on SO
有关我的问题是简化这个问题。
假设我的表中有一列包含如下逻辑条件:
select '200 > 100'checkit, '' result into SomeTable
union
select '200 > 100', ''
union
select '123 > 100', ''
union
select '200 > 500', ''
union
select '1 > 10', ''
我想要做的是检查这些条件并在输出中添加一个列,告诉条件是真还是假。
这样的事情:
输出
但如果可能,我希望使用Dynamic SQL
。
修改
一种方法是使用RBAR并使用游标或循环。然后将此列的值存储在某个临时变量中。然后使用动态sql执行它。
事情是我不想一行一行。我正在寻找更好的方法。
答案 0 :(得分:1)
我在CASE的帮助下尝试过它对我有用 首先,我们必须从'>'中拆分价值然后我们必须在INT中转换它然后我们可以在CASE的帮助下进行比较
CREATE TABLE checkit
([checkit] varchar(50))
;
INSERT INTO checkit
([checkit])
VALUES
('10 > 100'),
('123 > 100'),
('200 > 100'),
('200 > 500')
;
SELECT checkit, SUBSTRING(checkit,1,CHARINDEX('>',checkit)-1),
SUBSTRING(checkit,CHARINDEX('>',checkit,0) + 1, LEN(checkit)-CHARINDEX('>',checkit,0)),
'IsTrue' =
CASE
WHEN CAST(SUBSTRING(checkit,1,CHARINDEX('>',checkit)-1) as int) > CAST(SUBSTRING(checkit,CHARINDEX('>',checkit,0) + 1, LEN(checkit)-CHARINDEX('>',checkit,0)) as int)
THEN 1
ELSE 0
END
FROM checkit
答案 1 :(得分:0)
这应该有效:
DECLARE @dSQL nvarchar(MAX)
SELECT @dSQL = COALESCE(@dSQL + ',', '') +
'(''' + checkit + ''',CASE WHEN ' + checkit + ' THEN ''TRUE'' ELSE ''FALSE'' END)'
FROM checkit
SET @dSQL = 'SELECT * FROM (VALUES' + @dSQL + ') v(checkit,result)'
EXEC sp_executesql @dSQL
这里是fiddle