我附上了一个样本。这就像查询方法。但是我在存储过程中使用这个查询。查询非常快。但是程序很慢。原因是什么。
DECLARE @lsId VARCHAR(20);
DECLARE @lsDate VARCHAR(20);
SET @lsId = '802306';
SET @lsDate = '2017-10-02';
SELECT fld_region [REGION],
ISNULL([CINEMA], 0) [CINEMA],
ISNULL([ECONOMY], 0) [ECONOMY],
ISNULL([HD PRIME], 0) [HD PRIME],
ISNULL([HD SUPREME], 0) [HD SUPREME],
ISNULL([HD ULTRA], 0) [HD ULTRA],
ISNULL([INDI], 0) [INDI],
ISNULL([KUSHI], 0) [KUSHI],
ISNULL([MEGA], 0) [MEGA],
ISNULL([ROI VALUE], 0) [ROI VALUE],
ISNULL([ROI VALUE PLUS], 0) [ROI VALUE PLUS],
ISNULL([SOUTH VALUE], 0) [SOUTH VALUE],
ISNULL([SUPER VALUE], 0) [SUPER VALUE],
ISNULL([WORLD], 0) [WORLD]
FROM
(
SELECT b.fld_region,
a.fld_pack_name,
a.fld_count
FROM TBL_ACTIVE_CUSTOMER_DT_PLAN_WISE a
JOIN VHierarchyDT b ON b.FLD_DTCODE = a.FLD_DTCODE
AND b.SH_ID = @lsId
AND a.fld_act_date = @lsDate
) x PIVOT(SUM(fld_count) FOR fld_pack_name IN([CINEMA],
[ECONOMY],
[HD PRIME],
[HD SUPREME],
[HD ULTRA],
[INDI],
[KUSHI],
[MEGA],
[ROI VALUE],
[ROI VALUE PLUS],
[SOUTH VALUE],
[SUPER VALUE],
[WORLD])) p;
答案 0 :(得分:0)
也许尝试设置变量数据类型
DECLARE @lsId INT; --If this is the correct data type
DECLARE @lsDate DATE; --If this is the correct data type
SET @lsId = 802306;
SET @lsDate = '2017-10-02';
SELECT fld_region [REGION],
ISNULL([CINEMA], 0) [CINEMA],
ISNULL([ECONOMY], 0) [ECONOMY],
ISNULL([HD PRIME], 0) [HD PRIME],
ISNULL([HD SUPREME], 0) [HD SUPREME],
ISNULL([HD ULTRA], 0) [HD ULTRA],
ISNULL([INDI], 0) [INDI],
ISNULL([KUSHI], 0) [KUSHI],
ISNULL([MEGA], 0) [MEGA],
ISNULL([ROI VALUE], 0) [ROI VALUE],
ISNULL([ROI VALUE PLUS], 0) [ROI VALUE PLUS],
ISNULL([SOUTH VALUE], 0) [SOUTH VALUE],
ISNULL([SUPER VALUE], 0) [SUPER VALUE],
ISNULL([WORLD], 0) [WORLD]
FROM
(
SELECT b.fld_region,
a.fld_pack_name,
a.fld_count
FROM TBL_ACTIVE_CUSTOMER_DT_PLAN_WISE a
JOIN VHierarchyDT b ON b.FLD_DTCODE = a.FLD_DTCODE
AND b.SH_ID = @lsId
AND a.fld_act_date = @lsDate
) x PIVOT(SUM(fld_count) FOR fld_pack_name IN([CINEMA],
[ECONOMY],
[HD PRIME],
[HD SUPREME],
[HD ULTRA],
[INDI],
[KUSHI],
[MEGA],
[ROI VALUE],
[ROI VALUE PLUS],
[SOUTH VALUE],
[SUPER VALUE],
[WORLD])) p;
或者将初始数据拉入临时表
DECLARE @lsId INT; --If this is the correct data type
DECLARE @lsDate DATE; --If this is the correct data type
SET @lsId = 802306;
SET @lsDate = '2017-10-02';
IF OBJECT_ID('tempdb..##PivotData') IS NOT NULL
DROP TABLE ##PivotData
SELECT b.fld_region,
a.fld_pack_name,
a.fld_count
INTO ##PivotData --I would normally create and not select into.
FROM TBL_ACTIVE_CUSTOMER_DT_PLAN_WISE a
JOIN VHierarchyDT b ON b.FLD_DTCODE = a.FLD_DTCODE
AND b.SH_ID = @lsId
AND a.fld_act_date = @lsDate
SELECT fld_region [REGION],
ISNULL([CINEMA], 0) [CINEMA],
ISNULL([ECONOMY], 0) [ECONOMY],
ISNULL([HD PRIME], 0) [HD PRIME],
ISNULL([HD SUPREME], 0) [HD SUPREME],
ISNULL([HD ULTRA], 0) [HD ULTRA],
ISNULL([INDI], 0) [INDI],
ISNULL([KUSHI], 0) [KUSHI],
ISNULL([MEGA], 0) [MEGA],
ISNULL([ROI VALUE], 0) [ROI VALUE],
ISNULL([ROI VALUE PLUS], 0) [ROI VALUE PLUS],
ISNULL([SOUTH VALUE], 0) [SOUTH VALUE],
ISNULL([SUPER VALUE], 0) [SUPER VALUE],
ISNULL([WORLD], 0) [WORLD]
FROM ##PivotData x
PIVOT(SUM(fld_count) FOR fld_pack_name IN([CINEMA],
[ECONOMY],
[HD PRIME],
[HD SUPREME],
[HD ULTRA],
[INDI],
[KUSHI],
[MEGA],
[ROI VALUE],
[ROI VALUE PLUS],
[SOUTH VALUE],
[SUPER VALUE],
[WORLD])) p;