SQL-将两条记录合并到一条记录中
我有视野和桌子。在视图中,我试图从表中提取对开本和相关对开本,然后重新加入视图以获取相关对开本 我的问题如下:SQL-将两条记录合并到一条记录中,sql,Sql,我有视野和桌子。在视图中,我试图从表中提取对开本和相关对开本,然后重新加入视图以获取相关对开本 我的问题如下: SELECT DISTINCT A.FOLIOID ,A.FOLIOTYPE ,A.NAME ,A.FOLIONUMBER ,B.FOLIOID AS SUBFOLIOID ,B.FOLIONUMBER AS SUBFOLIO
SELECT DISTINCT A.FOLIOID
,A.FOLIOTYPE
,A.NAME
,A.FOLIONUMBER
,B.FOLIOID AS SUBFOLIOID
,B.FOLIONUMBER AS SUBFOLIONUMBER
FROM VW_FOLIO AS A
INNER JOIN FOLIOREF B ON B.FOLIOPARENTID = A.FOLIOID
INNER JOIN VW_FOLIO C ON C.FOLIOID=B.FOLIOID
WHERE A.FOLIONUMBER='2018-01-01'
SELECT DISTINCT A.FOLIOID
,A.FOLIOTYPE
,A.NAME
,A.FOLIONUMBER
,B.FOLIOID AS SUBFOLIOID
,B.FOLIONUMBER AS SUBFOLIONUMBER
,NVL(D.FOLIOID,'') AS SUBFOLIOID
,NVL(D.FOLIONUMBER,'') AS SUBFOLIONUMBER
FROM VW_FOLIO AS A
INNER JOIN FOLIOREF B ON B.FOLIOPARENTID = A.FOLIOID
INNER JOIN VW_FOLIO C ON C.FOLIOID=B.FOLIOID
LEFT JOIN FOLIOREF D ON D.FOLIOPARENTID = A.FOLIOID AND D.FOLIOPARENTID <> B.FOLIOPARENTID
WHERE A.FOLIONUMBER='2018-01-01'
它给了我这个结果
FOLIOID FOLIOTYPE NAME FOLIONUMBER SUBFOLIOID SUBFOLIO
ad61e75a5bcc DOORS JOHN BROWN 2018-01-01 bfdbf0bc9f24 2018-03-01
ad61e75a5bcc DOORS JOHN BROWN 2018-01-01 fbf4370a4d46 2018-03-15
FOLIOREF表如下所示:
FOLIOREFID FOLIOID FOLIOPARENTID
1c489c11e8dd bfdbf0bc9f24 ad61e75a5bcc
ece462200c59 fbf4370a4d46 ad61e75a5bcc
我认为问题在于如何将第二个子lio列在右边的列中,而不是创建新行
希望我足够清楚,有人能帮助我
****编辑帖子以显示我在下面试图做什么/得到什么*****
FOLIOID FOLIOTYPE NAME FOLIONUMBER SUBFOLIO1 SUBFOLIO2
ad61e75a5bcc DOORS JOHN BROWN 2018-01-01 2018-03-01 2018-03-15
请尝试以下操作:
SELECT DISTINCT A.FOLIOID
,A.FOLIOTYPE
,A.NAME
,A.FOLIONUMBER
,B.FOLIOID AS SUBFOLIOID
,B.FOLIONUMBER AS SUBFOLIONUMBER
FROM VW_FOLIO AS A
INNER JOIN FOLIOREF B ON B.FOLIOPARENTID = A.FOLIOID
INNER JOIN VW_FOLIO C ON C.FOLIOID=B.FOLIOID
WHERE A.FOLIONUMBER='2018-01-01'
SELECT DISTINCT A.FOLIOID
,A.FOLIOTYPE
,A.NAME
,A.FOLIONUMBER
,B.FOLIOID AS SUBFOLIOID
,B.FOLIONUMBER AS SUBFOLIONUMBER
,NVL(D.FOLIOID,'') AS SUBFOLIOID
,NVL(D.FOLIONUMBER,'') AS SUBFOLIONUMBER
FROM VW_FOLIO AS A
INNER JOIN FOLIOREF B ON B.FOLIOPARENTID = A.FOLIOID
INNER JOIN VW_FOLIO C ON C.FOLIOID=B.FOLIOID
LEFT JOIN FOLIOREF D ON D.FOLIOPARENTID = A.FOLIOID AND D.FOLIOPARENTID <> B.FOLIOPARENTID
WHERE A.FOLIONUMBER='2018-01-01'
我想我可能理解你的要求;但是,如果您以表格形式包含所需的结果,这将非常有帮助,就像您显示实际结果的方式一样。为了更容易帮助您,在您的示例中使用更短的id。我认为这就是您正在寻找的问题。这可以通过动态透视来解决,但考虑到您已经查询了两次视图并连接到一个表,从性能角度来看,这可能不是最佳的解决方案。可以有多少子lioid?N如果是这样,那么动态SQL将是最好的。If constant您可以使用case语句、max和group by来获得所需的结果。它告诉我NVL不是可识别的内置函数名。这取决于您使用的SQL。NVL是Oracle函数。对于MSSQL,使用ISNULL。我的大多数SQL都支持COALESCE函数,并且也支持它。但是这些功能在你的陈述中是不必要的。你不需要在陈述中使用它。谢谢你的回答,巴克齐。我按照你的建议试过了,效果很好,但我还是得到了两行记录。如果我想要一排。我该怎么办?我一直在尝试修复连接,但运气不好。我能够通过使用select语句中的前1行得到那1行,因为我得到了2行。尝试删除带有内部连接的行VW_FOLIO C ON C.FOLIOID=B.FOLIOID我认为应该这样做