June 19, 2015 at 7:58 am
Below is the table and desired results:
[Week] float,
[Month] float,
[C#] float,
[Dept] nvarchar(255)
,[Issue] nvarchar(255), [Type] nvarchar(255), [Dept age] nvarchar(255))
--===== All Inserts into the IDENTITY column
INSERT INTO #cs
([Year], [ Week], [ Month], [C#],[Dept],[Issue], [Type], [Dept age])
SELECT 2015, 14, 4, 188, D1,I1,T1, 5 UNION ALL
SELECT 2015, 14, 4, 452,d1, I1, T2, 5 UNION ALL
SELECT 2015, 14, 4, 63, d1, I1, T1, 6 UNION ALL
SELECT 2015, 14, 4, 9, d1,I2, T1, 7 UNION ALL
SELECT 2014, 14, 4, 187, D1,I1,T1, 5 UNION ALL
SELECT 2014, 14, 4, 451,d1, I1, T2, 5 UNION ALL
SELECT 2014, 14, 4, 62, d1, I1, T1, 6 UNION ALL
SELECT 2014, 14, 4, 10, d1,I2, T1, 7 UNION ALL,
select 2014, 14, 4, 199, d1, i3, t1, 8 UNION ALL,
select 2012, 14,4,200, d1, i5, t1, 8 UNION ALL,
Select 2014, 15, 4,200, d1, i1, t1, 10 UNION ALL,
Select 2013, 15, 4, 400, d1, i1, t1, 12)
Desired Result:
Week, Month, C1#,c2# Dept,Issue, Type, Dept age
14, 4 188 187 d1 i1 t1 5
14, 4 452 451 d1 i1 t2 5
15, 4, 200, 400, d1, i1, t1, 12
14, 4, 0 199 d1, i3, t1, 8
14,4,0 0, d1, i5, t1, 8
i.e Requirements
Condition 1)
I WANT two columns C1# and C2# in result table, where C1# contains data from 2015 for respective (Month, week, Dept, issue, type, dept age) combination and C2# contains data from previous year (2014) for respective (Month, week, Dept, issue, type, dept age) combination.
e.g. Week, Month, C1#,c2# Dept,Issue, Type, Dept age
14, 4 188 187 d1 i1 t1 5
Condition 2)
If 2015 data is not present for perticular week, then C1# will contain data of 2014 for same respective combination and C2# will contain data of 2013.
e.g.
Week, Month, C1#,c2# Dept,Issue, Type, Dept age
15, 4, 200, 400, d1, i1, t1, 12
Condition 3)
If for a perticular week 2015 data doesn't exist for any (Dept,Issue, Type, Dept age) combination but other (Dept,Issue, Type, Dept age) combination data exist for the same week in 2015 then c1 should be null or 0 for the combination where it doesn't exist
e.g
Week, Month, C1#,c2# Dept,Issue, Type, Dept age
14, 4, 0 199 d1, i3, t1, 8
14,4,0 0, d1, i5, t1, 8
Note: Condition 1 and 2 are meeting from the above posted query, but condition 3 is not meeting.
Hope this helps.and sorry for trouble.
Any solution wil be helpful.
June 19, 2015 at 8:13 am
Nice attempt at posting ddl and sample data. Unfortunately the table definition is incomplete and the sample data won't run as posted.
Why in the world are you storing Year and the other columns as floats??? Why not use a date or datetime column? The biggest challenge I have here is that it is not at all clear what the logic is to get your expected results.
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/
June 19, 2015 at 8:16 am
Here is the updated table:
create table #cs([Year] float,
[Week] float,
[Month] float,
[C#] float,
[Dept] nvarchar(255)
,[Issue] nvarchar(255), [Type] nvarchar(255), [Dept age] nvarchar(255))
This is how data is stored since long time.
June 19, 2015 at 8:21 am
sqlinterset (6/19/2015)
Here is the updated table:create table #cs([Year] float,
[Week] float,
[Month] float,
[C#] float,
[Dept] nvarchar(255)
,[Issue] nvarchar(255), [Type] nvarchar(255), [Dept age] nvarchar(255))
This is how data is stored since long time.
Storing integers as floats is crazy. :w00t:
Your sample data is not usable because the query is nowhere close to running as posted. I could clean it up but it still isn't clear what the logic needs to be. Can you try to explain more clearly what the business rules are here?
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/
June 19, 2015 at 8:44 am
Ok. So here are the better explanation (hope this will help)
i want a result table with below columns:
Week, Month, C1#,c2# Dept,Issue, Type, Dept age
where C1 is C# for perticular week, year (2015, w1) if data for that perticular week in 2015 exist for any combination of (Dept,Issue, Type, Dept age) but if for a perticular combination data in 2015 doesn't exist then c1 will be null. If there doesn't exist any data for any combination of (Dept,Issue, Type, Dept age) in (2015,w1) then c1 will take value of 2014.
C2 is C# for previous year in respective week (2014, w1) for respective c1 conbination of (Dept,Issue, Type, Dept age). Same as above: if for perticular combination of (Dept,Issue, Type, Dept age), data doesn't exist in (2014,w1) then it will be null.
hope this helps let me know for any confusion.
June 19, 2015 at 8:55 am
Taking your various posts I was able to piece together ddl and sample data.
create table #cs
(
[Year] float,
[Week] float,
[Month] float,
[C#] float,
[Dept] nvarchar(255),
[Issue] nvarchar(255),
[Type] nvarchar(255),
[Dept age] nvarchar(255)
)
INSERT INTO #cs
([Year], [Week], [Month], [C#], [Dept], [Issue], [Type], [Dept age])
SELECT 2015, 14, 4, 188, 'D1', 'I1', 'T1', 5 UNION ALL
SELECT 2015, 14, 4, 452, 'd1', 'I1', 'T2', 5 UNION ALL
SELECT 2015, 14, 4, 63, 'd1', 'I1', 'T1', 6 UNION ALL
SELECT 2015, 14, 4, 9, 'd1', 'I2', 'T1', 7 UNION ALL
SELECT 2014, 14, 4, 187, 'D1', 'I1', 'T1', 5 UNION ALL
SELECT 2014, 14, 4, 451, 'd1', 'I1', 'T2', 5 UNION ALL
SELECT 2014, 14, 4, 62, 'd1', 'I1', 'T1', 6 UNION ALL
SELECT 2014, 14, 4, 10, 'd1', 'I2', 'T1', 7 UNION ALL
select 2014, 14, 4, 199, 'd1', 'i3', 't1', 8 UNION ALL
select 2012, 14, 4, 200, 'd1', 'i5', 't1', 8 UNION ALL
Select 2014, 15, 4, 200, 'd1', 'i1', 't1', 10 UNION ALL
Select 2013, 15, 4, 400, 'd1', 'i1', 't1', 12
select *
from #cs
What doesn't make sense is the output. I can't even begin to comprehend what you are trying to do.
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/
June 19, 2015 at 9:01 am
tell me what confusion you have. I will start explaining in that terms.
June 19, 2015 at 9:15 am
sqlinterset (6/19/2015)
tell me what confusion you have. I will start explaining in that terms.
Nothing about your expected results makes sense to me at this point. You have 12 rows in your base table but only 5 coming out and the logic for the values I am 100% not getting.
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/
June 19, 2015 at 9:23 am
First attempt on getting this query working using Sean's sample data.
WITH cteCs AS(
select *,
ROW_NUMBER() OVER(PARTITION BY [Week], [Month], [Dept], [Issue], [Type], [Dept age] ORDER BY [Year] DESC) rn
from #cs
)
SELECT [Week],
[Month],
CASE WHEN MAX( CASE WHEN rn = 2 THEN [C#] END) IS NULL
THEN 0
ELSE MAX( CASE WHEN rn = 1 THEN [C#] END) END AS [C#1],
COALESCE( MAX(CASE WHEN rn = 2 THEN [C#] END), MAX( CASE WHEN rn = 1 THEN [C#] END), 0) AS [C#2],
[Dept],
[Issue],
[Type],
[Dept age]
FROM cteCs
GROUP BY [Week],
[Month],
[Dept],
[Issue],
[Type],
[Dept age];
June 19, 2015 at 9:30 am
sqlinterset (6/19/2015)
tell me what confusion you have. I will start explaining in that terms.
Just how many different threads have you started asking this very same question???
Are wondering why you aren't getting much help?? Could be because people are all over the place trying to help but those trying don't see what others are doing as well.
June 19, 2015 at 9:36 am
Question, how do we determine what year, week, month we are running the query for or is this based on the data in the table?
June 19, 2015 at 9:37 am
Sean Lange (6/19/2015)
Storing integers as floats is crazy. :w00t:
BWAA-HAA!!!! Storing date info in INTs is almost as crazy! 😀
--Jeff Moden
Change is inevitable... Change for the better is not.
June 19, 2015 at 12:34 pm
Here is the updated table, inputs and result table (in attachment). In last column of result table, i have explained the reason for few specific rows. and in C1, C2 columns i have placed year in () from where the data is coming:
create table #cs([Year] float,
[Week] float,
[Month] float,
[C#] float,
[Dept] nvarchar(255)
,[Issue] nvarchar(255), [Type] nvarchar(255), [Dept age] nvarchar(255))
--===== All Inserts into the IDENTITY column
INSERT INTO #cs
([Year], [ Week], [ Month], [C#],[Dept],[Issue], [Type], [Dept age])
SELECT 2015, 14, 4, 188, D1,I1,T1, 5 UNION ALL
SELECT 2015, 14, 4, 452,d1, I1, T2, 5 UNION ALL
SELECT 2015, 14, 4, 63, d1, I1, T1, 6 UNION ALL
SELECT 2015, 14, 4, 9, d1,I2, T1, 7 UNION ALL
select 2015, 14, 4, 11, d1, i8, t4, 10 UNION ALL
--***************************************
SELECT 2014, 14, 4, 187, D1,I1,T1, 5 UNION ALL
SELECT 2014, 14, 4, 451,d1, I1, T2, 5 UNION ALL
SELECT 2014, 14, 4, 62, d1, I1, T1, 6 UNION ALL
SELECT 2014, 14, 4, 10, d1,I2, T1, 7 UNION ALL
SELECT 2014, 15, 4, 10, d1,I2, T4, 7 UNION ALL
--***************************************
SELECT 2013, 15, 4, 111, d1,I2, T4, 7 UNION ALL
select 2014, 14, 4, 199, d1, i3, t1, 8 UNION ALL
Select 2013, 14, 4, 18, d1, i8, t4, 10)
I hope this will help!!
June 19, 2015 at 12:39 pm
sqlinterset (6/19/2015)
Here is the updated table, inputs and result table (in attachment). In last column of result table, i have explained the reason for few specific rows. and in C1, C2 columns i have placed year in () from where the data is coming:create table #cs([Year] float,
[Week] float,
[Month] float,
[C#] float,
[Dept] nvarchar(255)
,[Issue] nvarchar(255), [Type] nvarchar(255), [Dept age] nvarchar(255))
--===== All Inserts into the IDENTITY column
INSERT INTO #cs
([Year], [ Week], [ Month], [C#],[Dept],[Issue], [Type], [Dept age])
SELECT 2015, 14, 4, 188, D1,I1,T1, 5 UNION ALL
SELECT 2015, 14, 4, 452,d1, I1, T2, 5 UNION ALL
SELECT 2015, 14, 4, 63, d1, I1, T1, 6 UNION ALL
SELECT 2015, 14, 4, 9, d1,I2, T1, 7 UNION ALL
select 2015, 14, 4, 11, d1, i8, t4, 10 UNION ALL
--***************************************
SELECT 2014, 14, 4, 187, D1,I1,T1, 5 UNION ALL
SELECT 2014, 14, 4, 451,d1, I1, T2, 5 UNION ALL
SELECT 2014, 14, 4, 62, d1, I1, T1, 6 UNION ALL
SELECT 2014, 14, 4, 10, d1,I2, T1, 7 UNION ALL
SELECT 2014, 15, 4, 10, d1,I2, T4, 7 UNION ALL
--***************************************
SELECT 2013, 15, 4, 111, d1,I2, T4, 7 UNION ALL
select 2014, 14, 4, 199, d1, i3, t1, 8 UNION ALL
Select 2013, 14, 4, 18, d1, i8, t4, 10)
I hope this will help!!
You need to pay attention to details when you post. Please look at that mess of a table definition and data. I cleaned it once for you because what you posted won't work. I am beginning to get the feeling you don't really want any help.
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/
June 19, 2015 at 12:51 pm
Still have NO IDEA how you are wanting us to query the data.
This isn't what you need but it is the only way I can seem to explain what we need:
Are we doing this:
SELECT * FROM YourTable; -- Actual query will generate the required result set
OR
SELECT * FROM YourTable WHERE ??????; -- Where the ?'s are the criteria by which the data is selected
Viewing 15 posts - 1 through 15 (of 30 total)
You must be logged in to reply to this topic. Login to reply