2014-08-27 53 views
1

是否有可能將2行合併到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 | 
+--------------+--------+--------+ 

謝謝

+0

你能解釋你背後的邏輯問題嗎? – Jens 2014-08-27 07:43:29

+0

「合併」的邏輯是什麼?例如'Part Number 2'如何變成'Part Number 1' – 2014-08-27 07:44:25

+0

歡迎使用StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊「代碼示例」按鈕編輯器工具欄上的{}}可以很好地格式化和語法突出顯示它! – 2014-08-27 07:54:55

回答

0

這將取決於你所說的合併是什麼,但你肯定可以得到的數據,並在其他使用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

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' 
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 
相關問題