當前資料:
IF OBJECT_ID(N'tempdb..#Tmp') IS NOT NULL
BEGIN
DROP TABLE #Tmp
END
create table #Tmp (MasterID int,TableDataOrder int,Idea varchar(50),Feasibility varchar(50),BusinessReview varchar(50)
,Concept varchar(50),DetailedDesign varchar(50),TestValidation varchar(50),ManufacturingProductIntegration varchar(50)
,ProductSales varchar(50))
insert into #Tmp
select 26,1,NULL,'02',NULL,NULL,NULL,NULL,NULL,NULL
insert into #Tmp
select 26,1,NULL,NULL,NULL,'04',NULL,NULL,NULL,NULL
insert into #Tmp
select 26,1,NULL,NULL,NULL,NULL,'05',NULL,NULL,NULL
insert into #Tmp
select 26,2,NULL,NULL,NULL,NULL,'05',NULL,NULL,NULL
insert into #Tmp
select 26,3,NULL,NULL,NULL,NULL,'05',NULL,NULL,NULL
insert into #Tmp
select 26,4,NULL,NULL,NULL,NULL,'05',NULL,NULL,NULL
select * from #Tmp
當前結果:

預期結果:

如何合并 TableDataOrder 相同的資料?
uj5u.com熱心網友回復:
嘗試這個:
select
MasterID
, TableDataOrder
, max(Idea) Idea
, max(Feasibility) Feasibility
, max(BusinessReview) BusinessReview
, max(Concept) Concept
, max(DetailedDesign) DetailedDesign
, max(TestValidation) TestValidation
, max(ManufacturingProductIntegration) ManufacturingProductIntegration
, max(ProductSales) ProductSales
from #Tmp
group by MasterID
,TableDataOrder;
無所謂avg()or min()or max()or else。但是請注意,如果Feasibility已經用不同的值寫了兩次相同的值,TableDataOrder它將不起作用。
uj5u.com熱心網友回復:
你不想插入一個新行,所以你不能使用INSERT,你必須使用UPDATE。但由于您不知道該行是否會覆寫新行,您可以使用ON DUPLICATE KEY UPDATE,如下所示:
INSERT INTO #Tmp (MasterID, TableDataOrder, Idea, Feasability, ...)
SELECT (26, 1, NULL, '02', NULL, NULL, NULL, NULL, NULL, NULL) AS masterid_new, ...
ON DUPLICATE KEY UPDATE
Idea = COALESCE(Idea, idea_new),
Feasability = COALESCE(Feasability, feasability_new)
...
該COALESCE函式將回傳不是的第一個引數,NULL如果有則回傳現有值,否則回傳您提供的新值。該陳述句還假定您TableDataOrder被宣告為作業的主鍵ON DUPLICATE KEY UPDATE。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491959.html
上一篇:使用sql加入重疊時間?
