SQL 显示部分数据的查询

SQL query showing partial data

合并多个 table 时,我得到了结果,但它们只是部分结果。我知道问题很可能是我的加入或缺少加入,我似乎无法使它们正确(我不是 SQL 开发人员,只是将此问题抛给 "figure"出来)

我基本上想将这两个 table 结合起来。这是我的 tables / 查询,这些查询是我试图从中获取数据的每个 table 的基本 select 语句。

Table一个

select LB.WBS1, LB.WBS2, LB.LaborCode, LB.AmtBud, LB.HrsBud
from lB 
where wbs1 = '10312-00'

结果

LB Table

这里可以看到laborcode 02,03,04,06,13

这个table是劳动力预算,它给了我报告的前半部分。第二个 table 是人工详细信息,其中包括针对实际项目投入的时间。我需要将这两个组合成一个 SQL 语句,以便我可以使用 in 创建一个 SSRS 报告。

Table两个

Select LD.WBS1, LD.WBS2, ld.laborcode, ld.regamt, ld.reghrs
from LD
Where ld.wbs1 = '10312-00'
group by ld.laborcode, ld.regamt, ld.reghrs

结果

LD Table

在这里你可以看到 laborcode 01(这是我所缺少的)

我一直在使用的查询结合了 tables

SELECT  
    dbo.CFGLCCODESDESCRIPTIONS.label,
    dbo.LB.hrsbud,
    dbo.LB.rate,
    dbo.LB.amtbud,
    dbo.LD.reghrs,
    dbo.LD.ovthrs,
    dbo.LD.regamt,
    dbo.LD.reghrs + dbo.LD.ovthrs AS JTD,
    dbo.LB.laborcode,
    dbo.PR.wbs1,
    dbo.PR.wbs2,
    dbo.PR.pctcomp,
    dbo.PR.exppctcomp
FROM   
    dbo.CFGLCCODESDESCRIPTIONS
INNER JOIN 
    dbo.LB ON dbo.CFGLCCODESDESCRIPTIONS.code = dbo.LB.laborcode
INNER JOIN 
    dbo.PR ON dbo.LB.wbs1 = dbo.PR.wbs1 AND dbo.LB.wbs2 = dbo.PR.wbs2
INNER JOIN 
    dbo.LD ON dbo.PR.wbs1 = dbo.LD.wbs1 AND dbo.PR.wbs2 = dbo.LD.wbs2
WHERE  
    (dbo.LB.wbs1 = '10312-00')
ORDER BY 
    dbo.LB.laborcode,dbo.LD.laborcode

Results table

此查询returns 一个包含 154 行的大型数据集。这个图只有第一页,然后数据又重复了03的新工码,重复了04、06、13。问题是没有01的工码。我可能用错了table 开头。

这就是我试图想出的,或多或少: Final Result Report 问题是Laborcode=01只出现在LDtable中。基本上,我的报告由左半部分的 LB (laborBudget) table 和右半部分的 LD (laborDetail) table 组成。这是一份 gain/loss 报告,我被要求在 SSRS 中自定义构建,在我获得正确的数据后。

这是一个很难问的问题,因为我不知道该问什么,因为我不是 SQL 人。

正如我之前所说,laborcode = 01 在 LB 记录集中不存在。您可以将您的查询更改为下面的查询,它基本上会给您 01 但其余为空,因为该记录不存在 LB

SELECT    d.code as laborcode,
          d.label,
          q.hrsbud,
          q.rate,
          q.amtbud,
          q.reghrs,
          q.ovthrs,
          q.regamt,
          q.JTD,
          q.wbs1,
          q.wbs2,
          q.pctcomp,
          q.exppctcomp
FROM dbo.CFGLCCODESDESCRIPTIONS d
LEFT OUTER JOIN
(
    select    lb.laborcode,
              lb.hrsbud,
              lb.rate,
              lb.amtbud,
              ld.reghrs,
              ld.ovthrs,
              ld.regamt,
              ld.reghrs + ld.ovthrs AS JTD,
              pr.wbs1,
              pr.wbs2,
              pr.pctcomp,
              pr.exppctcomp
    from dbo.LB lb
    INNER JOIN dbo.PR pr
        ON lb.wbs1 = pr.wbs1 AND lb.wbs2 = pr.wbs2
    INNER JOIN dbo.LD ld
        ON ld.wbs1 = pr.wbs1 AND ld.wbs2 = pr.wbs2
    WHERE (lb.wbs1 = '10312-00')
)q on (d.code = q.laborcode)
ORDER BY d.code

删除“00”并将 wbs 分组然后将小时数加在一起的示例

SELECT    d.code as laborcode,
          d.label,
          SUM(q.hrsbud) as hrsbud,
          SUM(q.rate) as rate,
          SUM(q.amtbud) as amtbud,
          SUM(q.reghrs) as reghrs,
          SUM(q.ovthrs) as ovthrs,
          SUM(q.regamt) as regamt,
          SUM(q.JTD) as JTD,
          MIN(q.wbs1) as wbs1,
          MIN(q.wbs2) as wbs2,
          SUM(q.pctcomp) as pctcomp,
          SUM(q.exppctcomp) as exppctcomp
FROM dbo.CFGLCCODESDESCRIPTIONS d
LEFT OUTER JOIN
(
    select    lb.laborcode,
              lb.hrsbud,
              lb.rate,
              lb.amtbud,
              ld.reghrs,
              ld.ovthrs,
              ld.regamt,
              ld.reghrs + ld.ovthrs AS JTD,
              pr.wbs1,
              pr.wbs2,
              pr.pctcomp,
              pr.exppctcomp
    from dbo.LB lb
    INNER JOIN dbo.PR pr
        ON lb.wbs1 = pr.wbs1 AND lb.wbs2 = pr.wbs2
    INNER JOIN dbo.LD ld
        ON ld.wbs1 = pr.wbs1 AND ld.wbs2 = pr.wbs2
    WHERE (lb.wbs1 = '10312-00')
)q on (d.code = q.laborcode)
where d.code <> '00'
group by d.code, d.label
ORDER BY d.code

这里有一个问题:与其尝试加入这些引起如此多问题的 table,不如换个方向。此报告仅在用户请求时 运行 并且报告基于 WBS1 或 "project Number"。当 SSRS 运行内置报告时,它有大约 3500 行 SQL,但是它首先构建一个临时 table 来工作。如果我做了类似的事情并构建了一个临时 table 并将数据从我需要的不同来源插入其中并且只需要引用该报告来提取我的信息,最后它从数据库中删除了怎么办?这是可能的吗?我愿意做研究弄清楚我只是不想跟着大白兔浪费时间