使用SQL Firebird

时间:2017-03-01 23:34:51

标签: sql firebird

我使用的是Ostendo,这是一个FirebirdSQL数据库。

我们有装配。每个程序集都包含一个标题和许多AssemblyLines。每个AssemblyLine可以包含0多个AssemblyLineProperty记录(每个ALP记录通常是属性描述和属性值。 例如,装配线可能具有两个属性:值为AB-01的图号和值为2的值 我可以在两行上运行一个显示图号和值属性的查询,但我希望它在一行上。 我可以通过在Excel中彼此相邻的两个表来实现我想要的,但这很笨拙,最终会导致问题,这将对业务产生巨大的成本影响。

表1 SQL:

SELECT 
ASSEMBLYLINES.ORDERNUMBER, 
ASSEMBLYLINES.LINECODE, 
ASSEMBLYLINES.LINEDESCRIPTION AS "MATERIAL", 
ASSEMBLYLINES.ORDERQTY, 
ASSEMBLYLINEPROPS.PROPERTYVALUE AS "JOB QUANTITY" 

FROM ASSEMBLYLINEPROPS ASSEMBLYLINEPROPS, ASSEMBLYLINES ASSEMBLYLINES

WHERE ASSEMBLYLINEPROPS.HEADERSYSUNIQUEID = ASSEMBLYLINES.SYSUNIQUEID AND ((ASSEMBLYLINES.ORDERNUMBER='16606R01')) AND (PROPERTYNAME = 'Job Quantity')

表2:

SELECT 
ASSEMBLYLINEPROPS.PROPERTYVALUE AS "DRAWING NO." 

FROM ASSEMBLYLINEPROPS , ASSEMBLYLINES 

WHERE ASSEMBLYLINEPROPS.HEADERSYSUNIQUEID = ASSEMBLYLINES.SYSUNIQUEID AND  ((ASSEMBLYLINES.ORDERNUMBER='16606R01') AND (ASSEMBLYLINEPROPS.PROPERTYNAME='Drawing No'))

如何将两个查询合并为一个结果,以使图号和数量出现在同一行。

我相信我需要做一些嵌套,而不是加入。任何答案,线索或提示都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您需要两次加入ASSEMBLYLINEPROPS表以获取每个属性的属性值。我正在使用LEFT join以确保您仍然拥有订单,以防其中一个属性丢失:

SELECT 
ASSEMBLYLINES.ORDERNUMBER, 
ASSEMBLYLINES.LINECODE, 
ASSEMBLYLINES.LINEDESCRIPTION AS "MATERIAL", 
ASSEMBLYLINES.ORDERQTY, 
Q.PROPERTYVALUE AS "JOB QUANTITY",
D.PROPERTYVALUE AS "DRAWING NO." 
FROM ASSEMBLYLINES LEFT JOIN ASSEMBLYLINEPROPS Q
ON Q.HEADERSYSUNIQUEID = ASSEMBLYLINES.SYSUNIQUEID AND Q.PROPERTYNAME = 'Job Quantity'
LEFT JOIN ASSEMBLYLINEPROPS D 
ON D.HEADERSYSUNIQUEID = ASSEMBLYLINES.SYSUNIQUEID AND D.PROPERTYNAME = 'Drawing No'
WHERE ASSEMBLYLINES.ORDERNUMBER='16606R01'