Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中合并2行_Sql_Sql Server_Select_Group By - Fatal编程技术网

在SQL Server中合并2行

在SQL Server中合并2行,sql,sql-server,select,group-by,Sql,Sql Server,Select,Group By,在表或JOIN的某些结果中,存在两行Email相同,但其他值不同 例如: Email -/- Operation1 (BIT) -/- Operation2 (BIT) test@email.com -/- 1 -/- 0 test@email.com -/- 0 -/- 1 如何通过电子邮件将行分组并在下一种格式中选择它们(根据示例) 如果操作1在一行中为TRUE,则在结果返回TRUE中,如您的位字段表中所述,下面的查询将在SQL SER

在表或
JOIN
的某些结果中,存在两行
Email
相同,但其他值不同

例如:

Email          -/- Operation1 (BIT) -/- Operation2 (BIT)
test@email.com -/- 1          -/- 0
test@email.com -/- 0          -/- 1
如何通过
电子邮件将行分组并在下一种格式中选择它们(根据示例)


如果操作1在一行中为
TRUE
,则在结果返回
TRUE

中,如您的位字段表中所述,下面的查询将在SQL SERVER 2008中工作

CREATE TABLE #temp
(
email VARCHAR(30),
Operation1 BIT,
Operation2 BIT
)

INSERT INTO #temp VALUES('test@email.com',1,0)
INSERT INTO #temp VALUES('test@email.com',0,1)

-- METHOD 1
SELECT email,
MAX(CASE WHEN Operation1 = 1 THEN 1 ELSE 0 END) AS Operation1,
MAX(CASE WHEN Operation2 = 1 THEN 1 ELSE 0 END) AS Operation2
FROM #temp GROUP BY email

-- METHOD 2
SELECT email,MAX(CONVERT(INT,Operation1)) AS Operation1,
MAX(CONVERT(INT,Operation2)) AS Operation2
FROM #temp GROUP BY email


--DROP TABLE #TEMP

从这里发布的稀疏细节很难看出什么。也许像使用MAX和通过电子邮件分组一样简单?@SeanLange,嗯,是的,我认为这是个好主意。谢谢)我会试试的
CREATE TABLE #temp
(
email VARCHAR(30),
Operation1 BIT,
Operation2 BIT
)

INSERT INTO #temp VALUES('test@email.com',1,0)
INSERT INTO #temp VALUES('test@email.com',0,1)

-- METHOD 1
SELECT email,
MAX(CASE WHEN Operation1 = 1 THEN 1 ELSE 0 END) AS Operation1,
MAX(CASE WHEN Operation2 = 1 THEN 1 ELSE 0 END) AS Operation2
FROM #temp GROUP BY email

-- METHOD 2
SELECT email,MAX(CONVERT(INT,Operation1)) AS Operation1,
MAX(CONVERT(INT,Operation2)) AS Operation2
FROM #temp GROUP BY email


--DROP TABLE #TEMP