2011-11-06 65 views
2

我有一个表[Table] 3列[Column1],[Column2][Column3]计算多少列匹配条件

我的条件是:

WHERE [Column1] LIKE '%q%' OR [Column2] LIKE '%q%' OR [Column3] LIKE '%q%' 

它的工作原理,但我想通过比赛的数量结果进行排序。

例如

C1 - C2 - C3 
q - q - q 
q - a - q 
q - a - a 
+0

你的意思是你想匹配的列数订购? –

回答

2

尝试在查询此ORDER BY条款:

ORDER BY (CASE WHEN [Column1] LIKE '%q%' THEN 1 ELSE 0 END + 
      CASE WHEN [Column2] LIKE '%q%' THEN 1 ELSE 0 END + 
      CASE WHEN [Column3] LIKE '%q%' THEN 1 ELSE 0 END) DESC 
0

你或许应该第四列,类似添加到此:

SELECT [Col1],[Col2],[Col3], 
    CAST([Col1] LIKE '%q%' AS SMALLINT) + CAST([Col2] LIKE '%q%' AS SMALLINT) + 
    CAST([Col3] LIKE '%q%' AS SMALLINT) AS Strength 
.... 
ORDER BY Strength 

因为我不不知道您使用的是哪个数据库,您可能需要查阅文档以了解如何使用st从一个布尔值到一个整数。

伊泰

1
SELECT [Column1], [Column2], [Column3] FROM [Table] 
WHERE [Column1] LIKE '%q%' OR [Column2] LIKE '%q%' OR [Column3] LIKE '%q%' 
ORDER BY 
    (CASE WHEN [Column1] LIKE '%q%' THEN 1 ELSE 0 END) + 
    (CASE WHEN [Column2] LIKE '%q%' THEN 1 ELSE 0 END) + 
    (CASE WHEN [Column3] LIKE '%q%' THEN 1 ELSE 0 END) 
    DESC