2016-04-23 141 views
0

我在我正在使用的表上实现TSQL加密。我的SQL不是太强大,我目前有这个查询:TSQL DecryptbyKey子查询

SELECT 
    a.salary_group, 
    Count(*) as Count 
FROM 
    (SELECT 
     (CASE 
      WHEN Salary BETWEEN 0 and 10000 then '000-010k' 
      WHEN Salary BETWEEN 10001 and 20000 then '010-020k' 
      ELSE 'Outstanding' 
     END) AS 'salary_group' 
    FROM 
     Members)a 
GROUP BY a.salary_group; 

这很好。但是,我从Members表中删除了“Salary”列,现在数据被加密存储为名为“Salary_Encrypted”的列。

如何在上述查询中执行子查询到 SELECT CONVERT(int, DecryptByKey(Salary_Encrypted)) AS 'Salary'

谢谢!

回答

0

试试这个

SELECT 
     a.salary_group, 
     Count(*) as Count 
    FROM 
     (SELECT 
      (CASE 
       WHEN CONVERT(int, DecryptByKey(Salary_Encrypted)) BETWEEN 0 and 10000 then '000-010k' 
       WHEN CONVERT(int, DecryptByKey(Salary_Encrypted)) BETWEEN 10001 and 20000 then '010-020k' 
       ELSE 'Outstanding' 
      END) AS 'salary_group' 
     FROM 
      Members)a 
    GROUP BY a.salary_group; 
+0

谢谢阿克谢!我确实使用它作为临时解决方案,但不断尝试几件事来尝试获取子查询,所以我没有对每个案例运行转换,因为实际查询时间更长。 – Harrison

0

一些试验和错误之后,我最终使用:

SELECT 
    a.salary_group, 
    Count(*) as Count 
FROM 
    (SELECT 
     (CASE 
      WHEN b.Salary BETWEEN 0 and 10000 then '000-010k' 
      WHEN b.Salary BETWEEN 10001 and 20000 then '010-020k' 
      ELSE 'Outstanding' 
     END) AS 'salary_group' 
     FROM 
      (SELECT 
       Convert(int, dbo.Decrypt(Salary_Encrypted)) AS 'Salary' 
      FROM 
       Members)b 
     )a 
GROUP BY a.salary_group"; 

我想这至少是一定程度上比每个单独的线转换为我的实际case语句更优有更多的案件。

+0

我应该提到dbo.Decrypt是我在别处找到的一个函数。 – Harrison