繁体   English   中英

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

[英]Is it possible to merge 2 rows into a single row in 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   |
+--------------+--------+--------+

谢谢

这将取决于合并的含义,但是您当然可以使用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中

请尝试以下代码

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'

谢谢你们的回答,但我认为最简单的方法是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM