在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