Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7601979
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 30, 20262026-05-30T23:17:47+00:00 2026-05-30T23:17:47+00:00

I have following query which takes 2 parameters. YearNumber MonthNumber In my pivot query,

  • 0

I have following query which takes 2 parameters.

  1. YearNumber
  2. MonthNumber

In my pivot query, I am trying to select columns based on @Year_Rtl variable. I need to select data for the year passed, last year and last last year. Since the data being displayed on UI is table format divided by @Year_Rtl, I decided to write a pivot query for that as below.

In the query, it works fine if I hard code [@Year_Rtl], [@Year_Rtl - 1], [@Year_Rtl - 2] to [2012], [2011], [2010]. But since the year passed can be anything, I want columns to be named dynamically.

DECLARE @Month_Rtl int  
DECLARE @Year_Rtl int  

SET @Year_Rtl = 2012
SET @Month_Rtl = 1

SELECT  
    'Data 1', [@Year_Rtl], [@Year_Rtl - 1], [@Year_Rtl - 2]
FROM
   (SELECT [Yr_No], Qty
    FROM dbo.Table1 t
    WHERE (t.Col1 = 10) AND   
    (t.Col2 = '673') AND  
    ((t.Mth_No = @Month_Rtl AND t.Yr_No = @Year_Rtl) OR 
     (t.Mth_No = 12 AND t.Yr_No IN (@Year_Rtl - 1, @Year_Rtl - 2)))  
   ) p PIVOT (SUM(Qty)
              FOR [Yr_No] IN ([@Year_Rtl], [@Year_Rtl-1], [@Year_Rtl-2])
             ) AS pvt

Above query throws following errors:

Error converting data type nvarchar to smallint.
The incorrect value “@Year_Rtl” is supplied in the PIVOT operator.
Invalid column name ‘@Year_Rtl – 1’.
Invalid column name ‘@Year_Rtl – 2’.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-30T23:17:48+00:00Added an answer on May 30, 2026 at 11:17 pm

    Since you can use dynamic SQL, I’d go with a macro-replacement approach. You’re identifying areas of the query that must be dynamically replaced with placeholders (e.g. $$Year_Rtl) and then calculating their replacement values below. I find that it keeps the SQL statement easy to follow.

    DECLARE @SQL NVarChar(2000);
    SELECT @SQL = N'
      SELECT  
          ''Data 1'', [$$Year_Rtl], [$$Year_RtlM1], [$$Year_RtlM2]
      FROM
         (SELECT [Yr_No], Qty
          FROM dbo.Table1 t
          WHERE (t.Col1 = 10) AND   
          (t.Col2 = ''673'') AND  
          ((t.Mth_No = $$Month_Rtl AND t.Yr_No = $$Year_Rtl) OR 
           (t.Mth_No = 12 AND t.Yr_No IN ($$Year_RtlM1, $$Year_RtlM2)))  
         ) p PIVOT (SUM(Qty)
                    FOR [Yr_No] IN ([$$Year_Rtl], [$$Year_RtlM1], [$$Year_RtlM2])
                   ) AS pvt';
    
    SELECT @SQL = REPLACE(@SQL, '$$Year_RtlM2', @Year_Rtl - 2);
    SELECT @SQL = REPLACE(@SQL, '$$Year_RtlM1', @Year_Rtl - 1);
    SELECT @SQL = REPLACE(@SQL, '$$Year_Rtl', @Year_Rtl);
    SELECT @SQL = REPLACE(@SQL, '$$Month_Rtl', @Month_Rtl);
    
    PRINT @SQL;
    -- Uncomment the next line to allow the built query to execute...
    --EXECUTE sp_ExecuteSQL @SQL;
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have the following query which have 1000 rows select staffdiscountstartdate,datediff(day,groupstartdate,staffdiscountstartdate), EmployeeID from tblEmployees
I have the following query which works: SELECT ?page ?lat ?long (bif:st_distance(?geo, bif:st_point(42.883, -72.8981)))
I have following query which takes almost 1 minute to execute. public static Func<Entities,
I have the following query which takes too long to retrieve around 70000 records.
I have following query which has select query that returns data in 5sec. But
I have following query which take more than a minute to execute, how can
I have the following query which is working fine, but I also want to
I have the following query which returns a list of questions and the possible
I have the following query which gives me the right results. But it's super
I have the following MQL query which successfully returns the record for William Shakespeare.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.