【发布时间】:2012-05-03 02:35:52
【问题描述】:
所以我整天都在寻找解决这个问题的好方法,但结果却一无所获。假设我有一个类似这样的表:
ProjectID 位置 BilledSoFar NotBilled
-------------------------------------------------- --
EE123 AA1 100 200
EE456 MNGR 4000 500
EE123 AA3 43 0
EE012 SPEC1 435 4355
.... .... ...
我正在尝试做的是获取具有相同 projectID 的多行,并将所有这些行合并为一个。我需要每个项目 ID 的“Position”“BilledSoFar”和“NotBilled”,即使 ProjectID 不存在 Position,如下所示:
项目 ID
----------------------------------------------- -------------------------------------------------- ---------------
EE123 AA1 100 200 AA3 43 0 MNGR Null Null ......
等等。
所以我需要将给定项目 ID 的所有记录放在一行中,即使该项目 ID 不存在位置(上面的示例是 MNGR,它不是 EE123 下的位置)我也必须拥有所有职位和计费信息(如果 projectID 不存在该职位,则显然为 NULL)。我已经尝试过枢轴,加入并考虑过联合但仍然无法解决这个问题,而且我在这里的猜测已经不多了。
我还应该注意,我知道有固定数量的 projectid(比如 3400)和固定数量的 Position(比如 20 个)。
谢谢。
【问题讨论】:
-
你知道每个projectID有多少个职位吗?
-
如果您事先知道所有的 ProjectID,并且它们的数量是固定的,那么您可以完成这项工作,但我猜情况并非如此。一般来说,这不是 sql 要做的事情。我建议检索多行,然后在您的应用程序中组装它们,无论是“客户端”应用程序,还是最坏的情况,在存储过程中。
-
大家好,回答您的问题: eaolson - 我们知道有多少职位,总共大约有 20 个。贾斯汀 - 我们使用 SQL Server。 Grey- 是的,这就是为什么把这个任务交给我是一件很痛苦的事情。我会手动完成,但有成千上万的项目需要这个。我也知道所有这些项目。我已经做了一个 select distinct 来检索每个单独的,它只是让数据以这种方式运行,这就是诀窍。这是我需要做的一次性事情来生成报告,所以如果我可以让它在我好的时候处理数据。谢谢大家。
标签: sql sql-server join union pivot