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)
单程
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)
您可以通过强制隐式转换来避免看起来凌乱的双重转换:
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)