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我认为应该这样做