基本上,我有一个表,用来保存员工工作服的详细信息。它由柱子组成:
EmployeeID, CostCentre, AssociateLevel, IssueDate, TrouserSize, TrouserLength, TopSize & ShoeSize. 一名员工可以同时分配一条裤子、一件上衣和一双鞋,或者只分配一件或两件衣服。众所周知,人的规模和员工水平可能会发生变化,这就是为什么我真的需要帮助的原因。不同类型的员工(协会级别)需要不同颜色的衣服,但你可以忽略这一部分。每当员工收到一件衣服时,就会在表格中插入一个新的行,并输入日期。我需要能够为每个员工选择每件衣服的最新的衣服尺码。
没有必要让所有列都保持值,因为员工可能会在一年中的不同时间收到裤子或PoloT恤。
例如,如果员工'54664LSS‘在2011年3月24日得到了一条'XL’裤子和一件'L‘上衣,但随后在2010年5月26日得到了一件'M’上衣。这些项目的输入在两个不同的行上显然是有帮助的。因此,如果我想为每个服装类别选择最新的服装。然后需要返回'M‘尺码的上衣和'L’尺码的裤子的值。
任何帮助都是非常感谢的,因为我被困住了:(。谢谢。
发布于 2010-04-21 15:31:34
如果您能给出模式定义和一些样本数据,以及预期的输出,而不是注释,那么回答起来总是更容易一些。我已经尝试了一个模式定义,还没有得到任何示例数据,并且认为这个答案满足了您的需求:
/*create table Clothing (
EmployeeID int not null,
CostCentre varchar(10) not null,
AssociateLevel int not null,
IssueDate datetime not null,
TrouserSize int null,
TrouserLength int null,
TopSize varchar(4) null,
ShoeSize varchar(10) null
)*/
go
with Trousers as (
select
EmployeeID,
CostCentre,
AssociateLevel,
IssueDate,
TrouserSize,
TrouserLength,
RANK() OVER (PARTITION BY EmployeeID ORDER BY IssueDate Desc) as RowNum
from
Clothing
where
TrouserSize is not null
), Tops as (
select
EmployeeID,
CostCentre,
AssociateLevel,
IssueDate,
TopSize,
RANK() OVER (PARTITION BY EmployeeID ORDER BY IssueDate Desc) as RowNum
from
Clothing
where
TopSize is not null
), Shoes as (
select
EmployeeID,
CostCentre,
AssociateLevel,
IssueDate,
ShoeSize,
RANK() OVER (PARTITION BY EmployeeID ORDER BY IssueDate Desc) as RowNum
from
Clothing
where
ShoeSize is not null
)
select
COALESCE(tr.EmployeeID,tops.EmployeeID,sh.EmployeeID) as EmployeeID,
tr.CostCentre,
tr.AssociateLevel,
tr.IssueDate,
tr.TrouserSize,
tr.TrouserLength,
tops.CostCentre,
tops.AssociateLevel,
tops.IssueDate,
tops.TopSize,
sh.CostCentre,
sh.AssociateLevel,
sh.IssueDate,
sh.ShoeSize
from
Trousers tr
full outer join
Tops
on
tr.EmployeeID = Tops.EmployeeID
full outer join
Shoes sh
on
tr.EmployeeID = sh.EmployeeID and
Tops.EmployeeID = sh.EmployeeID
where
(tr.RowNum is null or tr.RowNUm = 1) and
(Tops.RowNum is null or Tops.RowNUm = 1) and
(sh.RowNum is null or sh.RowNum = 1)发布于 2010-04-20 18:46:15
SELECT TOP 1
TrouserSize, AssociateLevel
FROM
Employee
WHERE
EmployeeID = '54664LSS' AND
TrouserSize IS NOT NULL
ORDER BY
IssueDate DESC
SELECT TOP 1
TopSize, AssociateLevel
FROM
Employee
WHERE
EmployeeID = '54664LSS' AND
TopSize IS NOT NULL
ORDER BY
IssueDate DESC(抱歉,我编辑了这个sql大约6次,直到我想出了我认为的答案)
假设-只有一个问题日期列。您可以在发布日期发布多个项目,但您不需要一起查看这些结果(否则我们将不得不对联合结果进行分组)。如果没有发布任何项目,则在该列中放置一个null。
如果AssociateLevel在服装问题之间发生变化,我不确定您的逻辑是什么
https://stackoverflow.com/questions/2674352
复制相似问题