Zig*_*ler 4 sql sql-server sql-server-2008
如果这是重复的,我很抱歉。请指出我正确的问题。我使用的是 SQL SERVER 2008。我使用下面的查询,因为我需要从 3 个表中获取数据。
SELECT qc.FileID as [FileID],
qc.QID1 as [QID1],
xqs.SID1 as [SID1],
xqc.CID1 as [CID1],
xqs.Comments as [SComments],
xqc.Comments as [CComments]
FROM QCTable(nolock) qc
JOIN QCSectionTable (nolock) xqs ON qc.QCID = xqs.QCID
LEFT JOIN QCChargeTable (nolock) xqc ON xqc.QCXrefID = xqs.QCXrefID
Run Code Online (Sandbox Code Playgroud)
对于上面我得到这个像 FieID1 SID1 SID1 CID1 SComments CComments
我有一排像下面
FileID1 QID1 SID1 CID1 SComments CComments
Run Code Online (Sandbox Code Playgroud)
我需要将上面的行拆分为
FileID1 QID1 SID1 null SComments
FileID1 QID1 SID1 CID1 CComments
Run Code Online (Sandbox Code Playgroud)
提前致谢。
最简单的方法是union all
:
select FileID1, QID1, SID1, null as cId1, SComments
from table t
union all
select FileID1, QID1, SID1, cId1, CComments
from table t;
Run Code Online (Sandbox Code Playgroud)
如果您有大量数据,使用cross apply
或 a执行此操作可能会更快一些cross join
:
select v.*
from table t cross apply
(values (FileID1, QID1, SID1, null, SComments),
(FileID1, QID1, SID1, cId1, CComments)
) v(FileID1, QID1, SID1, cId1, CComments);
Run Code Online (Sandbox Code Playgroud)
优点是这只会扫描表一次。
归档时间: |
|
查看次数: |
25634 次 |
最近记录: |