簡體   English   中英

如何將包含多列的結果分成兩行

[英]How do I split results containing multiple columns into two rows each

我正在嘗試將輸出分為兩行,而不只是一行。 我最終希望通過循環遍歷這些返回值中的每個返回值來進行插入,但一次只能執行一次。

select m6.mrid
    ,'6' as 'FromProj'
    ,m10.mrid
    ,'10' as 'ToProj'
from master6 m6
left join master10 m10
    on (m01.mrtitle like '%40[%] load%' and m6.mrtitle like '%40[%] load%')
        or ((m6.mrtitle like '%ie11 know%' or m6.mrtitle like '%ie11 kr%') and m10.mrtitle like '%ie11 kr%')
        or (m6.mrtitle like '%survey issue%' and m10.mrtitle like '%survey issue%')
        or (m6.mrtitle like '%binary script%' and m10.mrtitle like '%binary script%')
        or (m6.mrtitle like '%zoom issue%' and m10.mrtitle like '%zoom issue%')
        or (m6.mrtitle like '%auto%submit%' and m10.mrtitle like '%auto%submit%')
where m10.mrtitle is not null

結果:

mrid   FromProj   mrid   ToProj
21     6          666    10
23     6          666    10
343    6          554    10
3432   6          222    10
5432   6          222    10

所需結果:

mrid   FromProj
21     6 
666    10
23     6 
666    10
343    6 
554    10
3432   6 
222    10
5432   6 
222    10

您可以將當前結果CROSS JOIN到'6'和'10'的行表示中以獲得行重復,然后使用CASE...WHEN過濾出適當的網mrid (m6或m10):

編輯

為了保留原始值的交錯順序,請將原始查詢移到派生表或CTE中,並為每個投影行(在交叉聯接之​​前)分配一個遞增計數器。 我用過ROW_NUMBER() ,但是你也可以用例如序列。

SELECT CASE WHEN x.FromProj = '6'
            THEN y.m6rid 
            ELSE y.m10mrid 
       END AS mrid,
       x.FromProj
from 
(SELECT m10.mrid as m10mrid, m6.mrid AS m6mrid, 
        ROW_NUMBER() OVER (ORDER BY m6.mrid ASC) AS rowOrder
 FROM master6 m6
  left join master10 m10
    on (m01.mrtitle like '%40[%] load%' and m6.mrtitle like '%40[%] load%')
        or ((m6.mrtitle like '%ie11 know%' or m6.mrtitle like '%ie11 kr%')
             and m10.mrtitle like '%ie11 kr%')
        or (m6.mrtitle like '%survey issue%' and m10.mrtitle like '%survey issue%')
        or (m6.mrtitle like '%binary script%' and m10.mrtitle like '%binary script%')
        or (m6.mrtitle like '%zoom issue%' and m10.mrtitle like '%zoom issue%')
        or (m6.mrtitle like '%auto%submit%' and m10.mrtitle like '%auto%submit%')
    where m10.mrtitle is not null
 ) y
cross join 
(select '6' as FromProj
 UNION
 select '10') x
ORDER BY rowOrder ASC, FromProj ASC; -- Since you want 6 before 10

如果您使用的是2005+版本,則可以使用CROSS APPLY取消顯示

SELECT ca.mrid,
       ca.FromProj
FROM   master6 m6
       INNER JOIN master10 m10
         ON ( m01.mrtitle LIKE '%40[%] load%'
              AND m6.mrtitle LIKE '%40[%] load%' )
             OR ( ( m6.mrtitle LIKE '%ie11 know%'
                     OR m6.mrtitle LIKE '%ie11 kr%' )
                  AND m10.mrtitle LIKE '%ie11 kr%' )
             OR ( m6.mrtitle LIKE '%survey issue%'
                  AND m10.mrtitle LIKE '%survey issue%' )
             OR ( m6.mrtitle LIKE '%binary script%'
                  AND m10.mrtitle LIKE '%binary script%' )
             OR ( m6.mrtitle LIKE '%zoom issue%'
                  AND m10.mrtitle LIKE '%zoom issue%' )
             OR ( m6.mrtitle LIKE '%auto%submit%'
                  AND m10.mrtitle LIKE '%auto%submit%' )
       CROSS APPLY (SELECT m6.mrid,
                           6
                    UNION ALL
                    SELECT m10.mrid,
                           10) ca(mrid, FromProj)
WHERE  m10.mrtitle IS NOT NULL
ORDER  BY mrid,
          FromProj 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM