我有一张这样的表:
**ID** | **read** | **edit** | **delete**|
1 true false false
2 false false true
3 true false true
4 true false false
我希望“OR”行,最后创建一个包含OR结果的行。没有for循环有没有办法做到这一点?什么是最好的方法 ? (行可能是这么多,我认为循环可能会降低速度)
答案 0 :(得分:4)
您可以将这些位转换为整数并使用MAX
来获得最大值;
SELECT MAX(CAST([read] AS INT)) [read],
MAX(CAST([edit] AS INT)) [edit],
MAX(CAST([delete] AS INT)) [delete]
FROM mytable;
答案 1 :(得分:3)
试试这个:
select
cast(max(cast([read] as int)) as bit) as [overall_read],
cast(max(cast([edit] as int)) as bit) as [overall_edit],
cast(max(cast([delete] as int)) as bit) as [overall_delete]
from tbl
当a or b
或a
中至少有一个为真时, b
为真,否则为假。因此,你可以直接减少这一点,以获得每列的最大值,正如@Joachim所指出的那样。