获取BIT列的MAX值

bAN*_*bAN 48 sql t-sql sql-server stored-procedures sql-server-2008

我有一个SELECT请求,在连接表中'内连接'是一个具有位类型的列.

我想选择1,如果在连接表中最多只有一个值为1.如果不是这样,则值将为0.

所以,如果我有:

PERSID | NAME
1      |  Toto
2      |  Titi
3      |  Tata
Run Code Online (Sandbox Code Playgroud)

和第二个表

PERSID | BOOL
1      |  0
1      |  0
2      |  0
2      |  1
Run Code Online (Sandbox Code Playgroud)

我想得到结果

Toto -> 0
Titi -> 1
Tata -> 0
Run Code Online (Sandbox Code Playgroud)

我试试这个:

SELECT 
     sur.*
    ,MAX(bo.BOOL)    

    FROM SURNAME sur              
    INNER JOIN BOOL bo
    ON bo.IDPERS = sur.IDPERS
Run Code Online (Sandbox Code Playgroud)

但是BIT列上没有MAX ..所以我该怎么做?

谢谢,

ken*_*ner 70

你可以将它投射到一个INT,BIT如果你需要,甚至可以把它投回去

SELECT 
     sur.*
    ,CAST(MAX(CAST(bo.BOOL as INT)) AS BIT)
    FROM SURNAME sur              
    INNER JOIN BOOL bo
    ON bo.IDPERS = sur.IDPERS
Run Code Online (Sandbox Code Playgroud)


And*_*mar 13

尝试:

max(cast(bo.BOOL as int))
Run Code Online (Sandbox Code Playgroud)

  • 请不要只发布一行代码.解释一下.-1 (6认同)

SQL*_*ace 6

单程

SELECT 
     sur.*
    ,MAX(convert(tinyint,bo.BOOL))    

    FROM SURNAME sur              
    INNER JOIN BOOL bo
    ON bo.IDPERS = sur.IDPERS
Run Code Online (Sandbox Code Playgroud)

  • 不,他们是一样的,我只是喜欢转换得更好 (2认同)

Stu*_*man 6

您可以通过强制隐式转换来避免看起来凌乱的双重转换:

SELECT 
     sur.*
    ,CAST(MAX(1 * bo.BOOL) AS BIT)
    FROM SURNAME sur              
    INNER JOIN BOOL bo
    ON bo.IDPERS = sur.IDPERS
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,这更麻烦,但是 +1 表示我以前从未见过的新方法 (4认同)