Sql 有代码来解释你的问题似乎和这个问题很相似:-1…在回答你的问题上花了很多精力;您没有对任何答案发表评论或将任何答案标记为正确! CREATE TABLE [dbo].[Employee]([EmployeeId] varchar(10) NULL, [Fi
Sql 有代码来解释你的问题似乎和这个问题很相似:-1…在回答你的问题上花了很多精力;您没有对任何答案发表评论或将任何答案标记为正确! CREATE TABLE [dbo].[Employee]([EmployeeId] varchar(10) NULL, [Fi,sql,sql-server,tsql,Sql,Sql Server,Tsql,有代码来解释你的问题似乎和这个问题很相似:-1…在回答你的问题上花了很多精力;您没有对任何答案发表评论或将任何答案标记为正确! CREATE TABLE [dbo].[Employee]([EmployeeId] varchar(10) NULL, [First Name] [varchar](30) NULL, [Middle Name] [varchar](30) NOT NULL, [Last Name] [varchar](30) NOT NULL, [E-Mail] [varchar]
有代码来解释你的问题似乎和这个问题很相似:-1…在回答你的问题上花了很多精力;您没有对任何答案发表评论或将任何答案标记为正确!
CREATE TABLE [dbo].[Employee]([EmployeeId] varchar(10) NULL,
[First Name] [varchar](30) NULL,
[Middle Name] [varchar](30) NOT NULL,
[Last Name] [varchar](30) NOT NULL,
[E-Mail] [varchar](80) NOT NULL)
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('BOB1','Bob','','','bob@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('BOB1','','John','','bob@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('BOB1','','','Smith','bob@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('MARK1','','Peter','','mark@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('MARK1','Mark','','','mark@hotmail.com');
insert into Employee(EmployeeId,[First Name],[Middle Name],[Last Name],[E-Mail])
values('MARK1','','','Davis','mark@hotmail.com');
select * from [Employee]
SELECT
fieldx = COALESCE(a.fieldx, b.fieldx),
fieldy = COALESCE(a.fieldy, b.fieldy),
fieldz = COALESCE(a.fieldz, b.fieldz),
[N]=SUM(ISNULL(a.[N],0.0)),
[M]=SUM(ISNULL(b.[M],0.0))
FROM
myTable1 a
FULL OUTER JOIN myTable2 b
ON a.fieldx = b.fieldx
a.fieldy = b.fieldy
a.fieldz = b.fieldz
GROUP BY
COALESCE(a.fieldx, b.fieldx),
COALESCE(a.fieldy, b.fieldy),
COALESCE(a.fieldz, b.fieldz)
UPDATE SomeTable SET
Field1 =
(
SELECT TOP 1 t2.Field1
FROM SomeTable t2
WHERE
t2.Field1 IS NOT NULL
AND
t2.GroupingKey = SomeTable.GroupingKey
ORDER BY Ranking DESC
)
FROM SomeTable
DELETE SomeTable
FROM SomeTable
INNER JOIN
(
SELECT
GroupingKey,
MAX(Ranking) as MaxRanking
FROM SomeTable
) t2 ON
SomeTable.GroupingKey = t2.GroupingKey
AND
SomeTable.Ranking < t2.MaxRanking
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.IO;
using Microsoft.SqlServer.Server;
[Serializable]
[SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize = -1, IsNullIfEmpty = true)]
public struct LowestRankString : IBinarySerialize
{
public int currentRank;
public SqlString currentValue;
public void Init()
{
currentRank = int.MaxValue;
currentValue = SqlString.Null;
}
public void Accumulate(int Rank, SqlString Value)
{
if (!Value.IsNull)
{
if (Rank <= currentRank)
{
currentRank = Rank;
currentValue = Value;
}
}
}
public void Merge(LowestRankString Group)
{
Accumulate(Group.currentRank, Group.currentValue);
}
public SqlString Terminate()
{
return currentValue;
}
public void Read(BinaryReader r)
{
currentRank = r.ReadInt32();
bool hasValue = r.ReadBoolean();
if (hasValue)
{
currentValue = new SqlString(r.ReadString());
}
else
{
currentValue = SqlString.Null;
}
}
public void Write(BinaryWriter w)
{
w.Write(currentRank);
bool hasValue = !currentValue.IsNull;
w.Write(hasValue);
if (hasValue)
{
w.Write(currentValue.Value);
}
}
}
INSERT INTO TopNonNullRank (Id, UserId, Value1, Value2, Value3, Value4) VALUES
(1, N'Ada', NULL, N'Top value 2 for A', N'Top value 3 for A', NULL),
(2, N'Ada', N'Top value 1 for A', NULL, N'Other value 3', N'Top value 4 for A'),
(3, N'Ada', N'Other value 1 for A', N'Other value 2 for A', N'Other value 3 for A', NULL),
(4, N'Bob', N'Top value 1 for B', NULL, NULL, NULL),
(5, N'Bob', NULL, NULL, NULL, N'Top value 4 for B'),
(6, N'Bob', N'Other value 1 for B', N'Top value 2 for B', NULL, N'Other value 4');
SELECT
UserId,
dbo.LowestRankString(Id, Value1) AS TopValue1,
dbo.LowestRankString(Id, Value2) AS TopValue2,
dbo.LowestRankString(Id, Value3) AS TopValue3,
dbo.LowestRankString(Id, Value4) AS TopValue4
FROM TopNonNullRank
GROUP BY UserId
WITH TopValuesPerUser AS
(
SELECT
UserId,
dbo.LowestRankString(Id, Value1) AS TopValue1,
dbo.LowestRankString(Id, Value2) AS TopValue2,
dbo.LowestRankString(Id, Value3) AS TopValue3,
dbo.LowestRankString(Id, Value4) AS TopValue4
FROM TopNonNullRank
GROUP BY UserId
)
UPDATE TopNonNullRank
SET
Value1 = TopValue1,
Value2 = TopValue2,
Value3 = TopValue3,
Value4 = TopValue4
FROM TopNonNullRank AS OriginalTable
LEFT JOIN TopValuesPerUser ON TopValuesPerUser.UserId = OriginalTable.UserId;