Reputation: 4721
I have an SP, which was working fine until I added two more columns. Now after adding two more columns it started giving error as
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.
But I have already inserted that columns.
two newly added columns are
Dept_received varchar(110), doc_type varchar(110)
Below is my SP.
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received varchar(110), doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(Dept_received, doc_type, date, Total,doc_From_To, Inward, First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer, Outward_Transfer,
Closed, Communication_Transfer, Returned)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END)
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, Dept_received, doc_type
END
Select * from #temp
I am using sql-server-2005
kindly help me what is the error
updated query
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received datetime,
doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),
Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(
Dept_received,
doc_type,
date,
Total,
doc_From_To,
Inward,
First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer,
Outward_Transfer,
Closed,
Communication_Transfer,
Returned
)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END),1,1
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, dept_received, doc_type
END
Select * from #temp
Upvotes: 1
Views: 62
Reputation: 3586
You can save trouble aligning INSERT
ed columns count and types with the temporary table structure by using SELECT INTO
:
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp;
SELECT
doc_date As [date], dept_received, doc_type, COUNT(*) As Total
,(SELECT kk.doc_no FROM inward_doc_tracking_hdr kk WHERE mkey in (SELECT min(mkey) FROM inward_doc_tracking_hdr jj WHERE jj.doc_date = convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(SELECT kk.doc_no FROM inward_doc_tracking_hdr kk WHERE mkey in (SELECT max(mkey) FROM inward_doc_tracking_hdr jj WHERE jj.doc_date = convert(datetime,aa.doc_date,103) ) )
As doc_From_To
,SUM(CASE WHEN status_flag in ( '6', '23') THEN 1 ELSE 0 END) As Inward
,SUM(CASE WHEN status_flag in ( '4', '26', '24') THEN 1 ELSE 0 END) As First_Level_Transfer
,SUM(CASE WHEN status_flag in ('15', '20') THEN 1 ELSE 0 END) As Data_Entry_Transfer
,SUM(CASE WHEN status_flag in ('17', '21') THEN 1 ELSE 0 END) As Second_Level_Transfer
,SUM(CASE WHEN status_flag in ('18', '27') THEN 1 ELSE 0 END) As Outward_Transfer
,SUM(CASE WHEN status_flag = '5' THEN 1 ELSE 0 END) As Closed
,SUM(CASE WHEN status_flag = '16' THEN 1 ELSE 0 END) As Communication_Transfer
,SUM(CASE WHEN status_flag = '14' THEN 1 ELSE 0 END) As Returned
INTO #temp
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, dept_received, doc_type
END
GO
Select * from #temp;
Upvotes: 0
Reputation: 2142
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received varchar(110),
doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),
Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(Dept_received, doc_type, date, Total,doc_From_To, Inward, First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer, Outward_Transfer,
Closed, Communication_Transfer, Returned)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END),1,1 --Add your values in place of 1, your issue will be resolved
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, Dept_received, doc_type
END
Select * from #temp
Upvotes: 1