是否可以在SQL Server 2008中将2行合并为单行?

时间:2014-08-27 07:40:11

标签: sql sql-server sql-server-2008

是否可以在SQL Server 2008中将2行合并为一行?

+--------------+--------+--------+
| Part Number  | Site 1 | Site 2 |
+--------------+--------+--------+
|     1        | True   | False  |
|     1        | False  | True   |
+--------------+--------+--------+

期望的结果

+--------------+--------+--------+
| Part Number  | Site 1 | Site 2 |
+--------------+--------+--------+
|     1        | True   | True   |
+--------------+--------+--------+

谢谢

3 个答案:

答案 0 :(得分:0)

这取决于你对merge的意思,但是你当然可以使用SET获取数据并覆盖另一个上面的记录。虽然这可以完全在SQL中完成,但最好将其构建到应用程序中。

UPDATE [dbo].[mytable]
SET
    [Site 1] = ([Site 1] | source.[Site 1]),
    [Site 2] = ([Site 2] | source.[Site 2])
FROM
    (
    SELECT
        [Part Number],
        [Site 1],
        [Site 2]
    FROM [dbp].[mytable]
    WHERE
        [Part Number] = 2
    ) source
WHERE
    [Part Number] = 1;
DELETE FROM [dbo].[mytable] WHERE [Part Number] = 2;

我相信这应该有用,虽然我还没有对它进行测试...而且它假设零件号是要合并的,因为在上面的例子中,零件号2似乎合并到零件号1

答案 1 :(得分:0)

请尝试以下代码

create table temp
(part_number varchar(10),
site1 varchar(10),
site2 varchar(10))

insert into temp(part_number)
select part_number from temp_table 
group by part_number

update t
set site1=temp_table.site1
From temp t 
inner join temp_table
on t.part_number=temp_table.part_number
where site1='True'
update t
set site2=temp_table.site2
From temp t 
inner join temp_table
on t.part_number=temp_table.part_number
where site2='True'

答案 2 :(得分:0)

感谢大家的答案,但我认为最简单的方法是

Select 
 CASE WHEN Sum(CONVERT(int,Site1))>0 Then 1 else 0 end as Site1,
 CASE WHEN Sum(CONVERT(int,Site2))>0 Then 1 else 0 end as Site2 
from myTable