所以我的报告中有一个重复的问题。 我目前正在通过Microsoft Sql Server 2012运行此查询。 以下是我的工作内容:
SELECT
oh.ORDERNO,
od.Rxnum,
oh.STATUS,
datediff(hh, o.recvtime, getdate()) as ageInHours
FROM
mck_hvs.ORDERHEADER oh with (nolock),
mck_hvs.ORDERDETAILS od with (nolock),
mck_hvs.SCRIPTITEMS si with (nolock),
mck_hvs.orderheader o with(nolock)
WHERE
oh.orderno = od.orderno and
si.orderno = od.orderno and
oh.STATUS = 550 and
od.DrugClass = 'C2' and
datediff(hh, o.recvtime, getdate()) <24
ORDER BY
oh.STATUS,
oh.orderno,
od.rxnum,
datediff(hh, o.recvtime, getdate()) desc
我正在尝试获取一份报告,列出我药房的具体订单号,然后将其列出,但相同的订单号信息可能有20-30页。
答案 0 :(得分:1)
正确,这就是SQL的工作原理:为每个匹配的详细信息重复一个标题(如在OrderHeader中)(如在OrderDetails中)。您可能需要额外的处理(可能使用其他语言 - 工具)来实现更好的&#34;报告的格式。
答案 1 :(得分:0)
主要问题是您在没有连接条件的Orderheader表的两个副本之间进行自联接。每当您在没有连接条件的情况下进行连接时,您将获得所加入的表的每个组合。在这种情况下,如果Orderheader表中有1000行,则此一个连接将在答案中为您提供1,000,000行。我建议您使用&#34; join&#34; SQL中的语法。这使得连接条件更清晰。如果您在结果中需要Orderheaders,即使您没有匹配的orderdetails或scriptitems,那么您需要将该表的连接更改为左连接。您的查询应如下所示:
SELECT
oh.ORDERNO,
od.Rxnum,
oh.STATUS,
datediff(hh, o.recvtime, getdate()) as ageInHours
FROM
mck_hvs.ORDERHEADER as oh inner join
mck_hvs.ORDERDETAILS as od on oh.orderno = od.orderno inner join
mck_hvs.SCRIPTITEMS as si on si.orderno = od.orderno inner join
mck_hvs.orderheader as o on <<MISSING JOIN CONDITION GOES HERE>>
WHERE
oh.STATUS = 550 and
od.DrugClass = 'C2' and
datediff(hh, o.recvtime, getdate()) <24
ORDER BY
oh.STATUS,
oh.orderno,
od.rxnum,
datediff(hh, o.recvtime, getdate()) desc