SQL - 从一对多的关系返回公司

时间:2013-04-11 13:33:29

标签: sql-server sql-server-2005

我需要帮助编写一个我坚持的查询。

我基本上需要CompanySteps列表,他们的“CompanyStepCompanyCode”正在等待,这意味着没有被指定为当前的“CompanyNextGoCompany”。所以他们正在等待轮到报告的一系列步骤。

公司与CompanyStep之间存在一对多的关系。一家拥有“CompanyWorkNumber”的公司可以拥有许多“CompanyStepStepOrder”。 这是一个关于数据外观的快照。抱歉格式不正确,不知道如何在这里创建好的表格。

+-------------------+----------------------+------------------------+----------------------+----------+
| CompanyWorkNumber | CompanyStepStepOrder | CompanyStepCompanyCode | CompanyNextGoCompany | lastStep |
+-------------------+----------------------+------------------------+----------------------+----------+
|           8126599 |                    1 | COBML                  | COBML                |        1 |
|           8126599 |                    2 | LASHW                  | COBML                |        2 |
|           8126599 |                    3 | UXEBC                  | COBML                |        3 |
|           8256656 |                    1 | ARKHA                  | COBML                |        1 |
|           8256656 |                    2 | COMSCH                 | COBML                |        2 |
|           8256656 |                    3 | LASHW                  | COBML                |        3 |
|           8356657 |                    1 | ARKHA                  | COBML                |        1 |
|           8356657 |                    2 | COMSCH                 | COBML                |        2 |
|           8356657 |                    3 | LASHW                  | COBML                |        3 |
|           8656658 |                    1 | ARKHA                  | COBML                |        1 |
|           8656658 |                    2 | TNSRA                  | COBML                |        2 |
|           8886659 |                    1 | LASHW                  | LASHW                |        1 |
|           8886659 |                    2 | UXEBC                  | LASHW                |        2 |
|           8886659 |                    3 | LASHW                  | LASHW                |        3 |
+-------------------+----------------------+------------------------+----------------------+----------+

因此,对于CompanyWorkNumber 8126599,我希望行LASHW返回,因为当前“CompanyStepCompanyCode(COBML)”被指定为Go“CompanynextGoCompany(COBML)”旁边仍然分配了他们的代码,这意味着他们还没有完成他们的步骤了。所以LASHW正在等待轮到他们。如果LASHW是下一个公司,或者步骤树中的许多公司,只要它在当前步骤的CompanyCode之后就没有关系。

因此,对于8886659,如果您注意到LASHW被指定为第一个继续执行Step的公司,但它们也是该WorkNumber的最后一个,因此对于那个,“CompanyStepStepOrder”3应该返回。

“lastStep”只是我所做的一个分区。我不确定它是否可以用于此。 我正在寻找旁边的公司来自另一张桌子,大约300张。我正在寻找加入这3个表,以便我可以将信息作为一个SELECT获取。

所以我想有一个WITH()可能......。? 我一直在搞乱不同的查询,但还没有真正的实力。有没有人对如何进行有任何建议?

如果有人会让我知道如何在这里制作一张桌子,那就太棒了:)。

此查询构建了上述内存版本,以便您可以处理数据。

WITH SRC
(
    CompanyWorkNumber
,   CompanyStepStepOrder
,   CompanyStepCompanyCode
,   CompanyNextGoCompany
,   lastStep
) AS
(
    SELECT 8126599, 1, 'COBML', 'COBML', 1
    UNION ALL SELECT 8126599, 2, 'LASHW', 'COBML', 2
    UNION ALL SELECT 8126599, 3, 'UXEBC', 'COBML', 3
    UNION ALL SELECT 8256656, 1, 'ARKHA', 'COBML', 1
    UNION ALL SELECT 8256656, 2, 'COMSCH', 'COBML', 2
    UNION ALL SELECT 8256656, 3, 'LASHW', 'COBML', 3
    UNION ALL SELECT 8356657, 1, 'ARKHA', 'COBML', 1
    UNION ALL SELECT 8356657, 2, 'COMSCH', 'COBML', 2
    UNION ALL SELECT 8356657, 3, 'LASHW', 'COBML', 3
    UNION ALL SELECT 8656658, 1, 'ARKHA', 'COBML', 1
    UNION ALL SELECT 8656658, 2, 'TNSRA', 'COBML', 2
    UNION ALL SELECT 8886659, 1, 'LASHW', 'LASHW', 1
    UNION ALL SELECT 8886659, 2, 'UXEBC', 'LASHW', 2
    UNION ALL SELECT 8886659, 3, 'LASHW', 'LASHW', 3
)
SELECT
    *
FROM
    SRC AS S

0 个答案:

没有答案