我有两张桌子:
T1:ASSEMBLYLINES(字段为ORDERNUMBER,LINECODE,ORDERQTY,SYSUNIQUEID)
T2:ASSEMBLYLINEISSUES(字段为ORDERNUMBER,COMPONENTCODE,ISSUEQTY,SYSUNIQUEID,HEADERSYSUNIQUEID)
在这个例子中有:
1 ASSEMBLYLINE记录,包含以下信息:
13088N03, 810044, 3, 12345678
3 ASSEMBLYLINEISSUES记录包含以下信息:
13088N03, 810044, 1, 11234567, 12345678
13088N03, 810044, 1, 12234567, 12345678
13088N03, 810044, 1, 13234567, 12345678
我的SQL代码是:
SELECT
ASSEMBLYLINES.ORDERNUMBER, ASSEMBLYLINES.LINECODE, ASSEMBLYLINES.ORDERQTY,
ASSEMBLYLINEISSUES.ORDERNUMBER, ASSEMBLYLINEISSUES.COMPONENTCODE, ASSEMBLYLINEISSUES.ISSUEQTY
FROM ASSEMBLYLINES
LEFT JOIN ASSEMBLYLINEISSUES ON ASSEMBLYLINES.SYSUNIQUEID = ASSEMBLYLINEISSUES.HEADERSYSUNIQUEID
结果是:
ORDERNUMBER LINECODE ORDERQTY ORDERNUMBER2 COMPONENTCODE ISSUEQTY
13088C33 800038 3 13088C33 800038 1
13088C33 800038 3 13088C33 800038 1
13088C33 800038 3 13088C33 800038 1
但这看起来像9被命令,但实际上只订购了3个。是否有可能获得如下结果:
ORDERNUMBER LINECODE ORDERQTY ORDERNUMBER2 COMPONENTCODE ISSUEQTY
13088C33 800038 3 13088C33 800038 1
13088C33 800038 13088C33 800038 1
13088C33 800038 13088C33 800038 1
我可以做两个单独的SQL,然后使用Excel创建它,但我想尽可能避免这种情况。
我也不想在ISSUEQTY上使用SUM公式。
*提前致谢。我试图以清晰简洁的方式构建我的问题,但是表格会对结果有所帮助。在编辑器中看起来很好,但结果不是很好,所以会试着查看如何最好地显示它。
答案 0 :(得分:2)
您可以在查询中引入CASE
和row_number
,以获得所需的结果,如下所示。
SELECT a.ORDERNUMBER,
a.LINECODE,
CASE
WHEN row_number() over(partition BY a.ORDERNUMBER, a.LINECODE,b.ORDERNUMBER, b.COMPONENTCODE, b.ISSUEQTY
ORDER BY a.ORDERNUMBER) = 1 THEN a.ORDERQTY
ELSE NULL
END AS Order_Quantity,
b.ORDERNUMBER,
b.COMPONENTCODE,
b.ISSUEQTY
FROM ASSEMBLYLINES a
LEFT JOIN ASSEMBLYLINEISSUES b ON a.SYSUNIQUEID = b.HEADERSYSUNIQUEID;
<强>结果:强>
ordernumber linecode order_quantity ordernumber componentcode issueqty
-----------------------------------------------------------------------------
13088N03 810044 3 13088N03 810044 1
13088N03 810044 13088N03 810044 1
13088N03 810044 13088N03 810044 1
您可以查看演示 here
希望这会有所帮助。
答案 1 :(得分:2)
ROW_NUMBER()函数是在Firebird 3.0中引入的(请参阅:Window Functions),因此您无法在Firebird 2.5中使用它。但您可以使用stored procedure或execute block使用临时上下文变量。例如:
Image