Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 连接数据透视数据_Sql_Sql Server - Fatal编程技术网

Sql 连接数据透视数据

Sql 连接数据透视数据,sql,sql-server,Sql,Sql Server,下面是SQL Server查询-透视表包含大量数据。SQL工作正常,使用了正确的索引,但这需要很长时间。我只是想看看有什么我能做得更好的 DECLARE @DFLId VARCHAR(13) = '25' SELECT COALESCE(MM.CPD,MM1.CPD,Mlk.CPD,N.CPD) CPD, COALESCE(MM.MANbr,MM1.MANbr,Mlk.MANbr,N.MANbr) MANbr, COALESCE(

下面是SQL Server查询-透视表包含大量数据。SQL工作正常,使用了正确的索引,但这需要很长时间。我只是想看看有什么我能做得更好的

DECLARE @DFLId VARCHAR(13) = '25'

SELECT                    
    COALESCE(MM.CPD,MM1.CPD,Mlk.CPD,N.CPD) CPD,
    COALESCE(MM.MANbr,MM1.MANbr,Mlk.MANbr,N.MANbr) MANbr,
    COALESCE(MM.PC,MM1.PC,Mlk.PC,M.PC) PC,
    A.*
FROM 
    (SELECT A.* 
     FROM dbo.tblA A 
     WHERE A.DFLId = @DFLId) B  
LEFT OUTER JOIN 
    (SELECT MID, CPD, PC, MANbr 
     FROM dbo.tblpivot WITH(INDEX(idx_tblpivot_PC_MId)) 
     WHERE LEFT(MANbr, 1) != 'L') MM  ON B.CPD = MM.PC AND B.MID = MM.MID
LEFT OUTER JOIN 
    (SELECT MID, CPD, PC, MANbr 
     FROM dbo.tblpivot WITH(INDEX(idx_tblpivot_PC_MId)) 
     WHERE LEFT(MANbr, 1) = 'L') MM1 ON B.PC = MM1.PC AND B.MId = MM1.MId 
LEFT OUTER JOIN 
    (SELECT MID, CPD, PC, MANbr 
     FROM dbo.tblpivot WITH(INDEX(idx_tblpivot_MT)) 
     WHERE MT IN ('A', 'B', 'C', 'D')) Mlk ON B.MId = Mlk.MId
LEFT OUTER JOIN 
    (SELECT MID, CPD, PC, MANbr 
     FROM dbo.tblpivot WITH(INDEX(idx_tblpivot_MT)) 
     WHERE MT = 'DB') N ON (B.PC = N.PC)

. . 为什么要在SQL Server问题上添加Postgres标记?具有您声誉的人应该知道如何标记正确的数据库。我还建议你提供样本数据和期望的结果,并解释你试图实现的逻辑。天哪,对不起,我试图从专家那里得到某种回应:(基本上,我是从合并到主tblA的pivot中查找数据。我可以使用主tblA和筛选器执行left outer,也可以合并所有pivot tbl查询,然后连接到主tblA。我想是一样的。我不想使用or条件并执行单个sql来获取pivot tbl数据,因为这样会浪费索引。我正在尝试为左外部联接找到一些替代方法..子查询不会像往常一样为主TBLA提供列:请提交执行图-可能缺少索引。还有-有多少数据?为什么ID是字符串-效率很低。我不确定左(MANbr,1)=“L”是否使用索引,而不是“LIKE'MANbr%”它确实使用了索引。我将尝试获取执行计划,但根本没有缺少索引。我提前处理了这一问题。如果是索引问题,我现在可能已经排序了。