选择其列表达式值为有效的行

时间:2015-07-21 08:44:22

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

我有一个表,其列的表达式为其值。 我想写一个单选查询来检查该列中的表达式是否保持为真。

这是我的表:

CREATE TABLE #TEMP (FinYear VARCHAR(9), TaxType VARCHAR(50), Rate NUMERIC(10,4), SlabExpression VARCHAR(50))  
INSERT INTO #TEMP  
VALUES ('2014-2015', 'SURCHARGE', 0.00, '#<=10000000'),  
       ('2014-2015', 'SURCHARGE', 10.00, '#>10000000'),  
       ('2014-2015', 'Education Cess', 3.00, '#<=10000000'),  
       ('2014-2015', 'Education Cess', 3.00, '#>10000000')  

SELECT * FROM #TEMP  
DROP TABLE #TEMP

我现在的收入价值是1200000,显然属于平板 - &#39;#&gt; 10000000&#39;我打算申请附加费和教育费率。

但是,如何通过单个查询找到正确的平板。

我知道我可以使用Cursor来做到这一点。但是,我不想在这里使用Cursor。 我需要一个单一查询。

注意:此表在一列中有两个SlabExpression值 即。 &#39;#&LT =千万&#39;和&#39;#&gt; 10000000&#39;

我想写一个单独的SELECT查询来获取SlabExpression保持为真的两行。
即。我希望结果为SlabExpression的两行&#39;#&gt; 10000000&#39;

基本上,我想要一个类似

的查询
SELECT * FROM #TEMP WHERE SlabExpression Holds True

3 个答案:

答案 0 :(得分:0)

FloatingActionButton

答案 1 :(得分:0)

这是解决这个问题的一种方法 在Sql server 2012上经过测试和验证,出于某种原因我似乎无法使它在sql小提琴上工作。 但是,据我所知,我没有使用Sql server 2008上不支持的任何内容。

DECLARE @Value int = 1200000

;WITH CTE AS (
    SELECT  FinYear, 
            TaxType, 
            Rate, 
            SlabExpression, 
            @Value As Value1,
            REPLACE(LEFT(SlabExpression, PATINDEX('%[0-9]%', SlabExpression)-1), '#', '') As Operator,
            CAST(RIGHT(SlabExpression, LEN(SlabExpression)-PATINDEX('%[0-9]%', SlabExpression)+1) As int) As Value2
    FROM #TEMP
), 
CTE2 AS (
    SELECT  FinYear, 
            TaxType, 
            Rate, 
            SlabExpression,
            CASE Operator 
                WHEN '<' THEN
                    CASE WHEN Value1 < Value2 THEN 1 END
                WHEN '<=' THEN
                    CASE WHEN Value1 <= Value2 THEN 1 END
                WHEN '>' THEN
                    CASE WHEN Value1 > Value2 THEN 1 END
                WHEN '>=' THEN
                    CASE WHEN Value1 >= Value2 THEN 1 END
            END As IsTrue
    FROM CTE
)

SELECT  FinYear, 
        TaxType, 
        Rate, 
        SlabExpression
FROM CTE2 
WHERE IsTrue = 1

结果:

FinYear     TaxType                Rate           SlabExpression
----------- ---------------------- -------------- --------------
2014-2015   SURCHARGE              0.0000         #<=10000000
2014-2015   Education Cess         3.0000         #<=10000000

说明: 我使用第一个cte将SlabExpression分解为运算符和值, 第二个cte使用该运算符和值来对应变量值。

答案 2 :(得分:-1)

我认为这些SQL对你有用。

SELECT * FROM #TEMP WHERE SlabExpression = '1200000>10000000'

谢谢。

相关问题