Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
jim_jim
Constraint Violating Yak Guru
306 Posts |
Posted - 2013-02-26 : 16:41:30
|
Hi AllI have a union query two retreive data of two requests where 1 request is from 2012 and 1 from 2013.the below sql gets me two records 1 for each request. How do i compare each column and display YES whereever botht the columns are equal,Display NO where both columns are not same and Display NA where both columns are NULLselect requestid,receiveddate,neededby,reportfrequency,definesch,schedule,clmsrvdt,clmsrvdtthru,clmpddt,clmpddtthru,agentid,customernamefrom Customer_request where requestid = 300430unionselect requestid,receiveddate,neededby,reportfrequency,definesch,schedule,clmsrvdt,clmsrvdtthru,clmpddt,clmpddtthru,agentid,customernamefrom Customer_request where requestid = 223681 RESULTSrequestid receiveddate neededby reportfrequency defineschedule schedulebasedon clmsrvdt clmsrvdtthru clmpddt clmpddtthru agentid300430 11/29/12 12/6/12 Recurring Monthly 1/1/12 12/31/12 65223681 1/18/11 2/25/11 Recurring QuaterLY 1/1/11 1/31/11 65 NO NO YES NO NA NA NA N N YESneed help please |
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2013-02-26 : 17:24:46
|
You could do something like:DECLARE @Foo TABLE (ID INT, Val1 INT, Val2 DATETIME, Val3 VARCHAR(10))INSERT @FooVALUES(1, 1234, SYSDATETIME(), 'Foo'),(2, 4321, SYSDATETIME(), 'Bar')SELECT CASE WHEN A.ID = B.ID THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val1 = B.Val1 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val2 = B.Val2 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val3 = B.Val3 THEN 'Yes' ELSE 'No' ENDFROM (SELECT * FROM @Foo WHERE ID = 1) AS AINNER JOIN (SELECT * FROM @Foo WHERE ID = 2) AS B ON 1 = 1 |
|
|
jim_jim
Constraint Violating Yak Guru
306 Posts |
Posted - 2013-02-27 : 08:27:02
|
How can i get the results from this query along with the values insertedquote: Originally posted by Lamprey You could do something like:DECLARE @Foo TABLE (ID INT, Val1 INT, Val2 DATETIME, Val3 VARCHAR(10))INSERT @FooVALUES(1, 1234, SYSDATETIME(), 'Foo'),(2, 4321, SYSDATETIME(), 'Bar')SELECT CASE WHEN A.ID = B.ID THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val1 = B.Val1 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val2 = B.Val2 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val3 = B.Val3 THEN 'Yes' ELSE 'No' ENDFROM (SELECT * FROM @Foo WHERE ID = 1) AS AINNER JOIN (SELECT * FROM @Foo WHERE ID = 2) AS B ON 1 = 1
|
|
|
James K
Master Smack Fu Yak Hacker
3873 Posts |
Posted - 2013-02-27 : 09:19:08
|
Do you mean like shown below?DECLARE @Foo TABLE (ID INT, Val1 INT, Val2 DATETIME, Val3 VARCHAR(10))INSERT @FooVALUES(1, 1234, SYSDATETIME(), 'Foo'),(2, 4321, SYSDATETIME(), 'Bar')SELECT a.*, b.*, CASE WHEN A.ID = B.ID THEN 'Yes' ELSE 'No' END AS SameID, CASE WHEN A.Val1 = B.Val1 THEN 'Yes' ELSE 'No' END AS SameVal1, CASE WHEN A.Val2 = B.Val2 THEN 'Yes' ELSE 'No' END AS SameVal2, CASE WHEN A.Val3 = B.Val3 THEN 'Yes' ELSE 'No' END AS SameVal3FROM (SELECT * FROM @Foo WHERE ID = 1) AS AINNER JOIN (SELECT * FROM @Foo WHERE ID = 2) AS B ON 1 = 1 |
|
|
jim_jim
Constraint Violating Yak Guru
306 Posts |
Posted - 2013-02-27 : 10:00:17
|
Nope I would like to see results as below if possibleRESULTSrequestid receiveddate neededby reportfrequency defineschedule schedulebasedon clmsrvdt clmsrvdtthru clmpddt clmpddtthru agentid300430 11/29/12 12/6/12 Recurring Monthly 1/1/12 12/31/12 65223681 1/18/11 2/25/11 Recurring QuaterLY 1/1/11 1/31/11 65NO NO YES NO NA NA NA N N YESquote: Originally posted by James K Do you mean like shown below?DECLARE @Foo TABLE (ID INT, Val1 INT, Val2 DATETIME, Val3 VARCHAR(10))INSERT @FooVALUES(1, 1234, SYSDATETIME(), 'Foo'),(2, 4321, SYSDATETIME(), 'Bar')SELECT a.*, b.*, CASE WHEN A.ID = B.ID THEN 'Yes' ELSE 'No' END AS SameID, CASE WHEN A.Val1 = B.Val1 THEN 'Yes' ELSE 'No' END AS SameVal1, CASE WHEN A.Val2 = B.Val2 THEN 'Yes' ELSE 'No' END AS SameVal2, CASE WHEN A.Val3 = B.Val3 THEN 'Yes' ELSE 'No' END AS SameVal3FROM (SELECT * FROM @Foo WHERE ID = 1) AS AINNER JOIN (SELECT * FROM @Foo WHERE ID = 2) AS B ON 1 = 1
|
|
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2013-02-27 : 11:37:53
|
Convert the current results to varchar and then union that with the results from my query is one way to do it. DECLARE @Foo TABLE (ID INT, Val1 INT, Val2 DATETIME, Val3 VARCHAR(10))INSERT @FooVALUES(1, 1234, SYSDATETIME(), 'Foo'),(2, 4321, SYSDATETIME(), 'Bar')SELECT CAST(ID AS VARCHAR(MAX)) AS ID, CAST(Val1 AS VARCHAR(MAX)) AS Val1, CAST(Val2 AS VARCHAR(MAX)) AS Val2, CAST(Val3 AS VARCHAR(MAX)) AS Val3FROM @Foo WHERE ID = 1 UNION ALLSELECT CAST(ID AS VARCHAR(MAX)) AS ID, CAST(Val1 AS VARCHAR(MAX)) AS Val1, CAST(Val2 AS VARCHAR(MAX)) AS Val2, CAST(Val3 AS VARCHAR(MAX)) AS Val3FROM @Foo WHERE ID = 2UNION ALLSELECT CASE WHEN A.ID = B.ID THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val1 = B.Val1 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val2 = B.Val2 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val3 = B.Val3 THEN 'Yes' ELSE 'No' ENDFROM (SELECT * FROM @Foo WHERE ID = 1) AS AINNER JOIN (SELECT * FROM @Foo WHERE ID = 2) AS B ON 1 = 1 |
|
|
jim_jim
Constraint Violating Yak Guru
306 Posts |
Posted - 2013-02-27 : 13:04:10
|
thank youquote: Originally posted by Lamprey Convert the current results to varchar and then union that with the results from my query is one way to do it. DECLARE @Foo TABLE (ID INT, Val1 INT, Val2 DATETIME, Val3 VARCHAR(10))INSERT @FooVALUES(1, 1234, SYSDATETIME(), 'Foo'),(2, 4321, SYSDATETIME(), 'Bar')SELECT CAST(ID AS VARCHAR(MAX)) AS ID, CAST(Val1 AS VARCHAR(MAX)) AS Val1, CAST(Val2 AS VARCHAR(MAX)) AS Val2, CAST(Val3 AS VARCHAR(MAX)) AS Val3FROM @Foo WHERE ID = 1 UNION ALLSELECT CAST(ID AS VARCHAR(MAX)) AS ID, CAST(Val1 AS VARCHAR(MAX)) AS Val1, CAST(Val2 AS VARCHAR(MAX)) AS Val2, CAST(Val3 AS VARCHAR(MAX)) AS Val3FROM @Foo WHERE ID = 2UNION ALLSELECT CASE WHEN A.ID = B.ID THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val1 = B.Val1 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val2 = B.Val2 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val3 = B.Val3 THEN 'Yes' ELSE 'No' ENDFROM (SELECT * FROM @Foo WHERE ID = 1) AS AINNER JOIN (SELECT * FROM @Foo WHERE ID = 2) AS B ON 1 = 1
|
|
|
jim_jim
Constraint Violating Yak Guru
306 Posts |
Posted - 2013-02-27 : 13:04:40
|
Thank youquote: Originally posted by James K Do you mean like shown below?DECLARE @Foo TABLE (ID INT, Val1 INT, Val2 DATETIME, Val3 VARCHAR(10))INSERT @FooVALUES(1, 1234, SYSDATETIME(), 'Foo'),(2, 4321, SYSDATETIME(), 'Bar')SELECT a.*, b.*, CASE WHEN A.ID = B.ID THEN 'Yes' ELSE 'No' END AS SameID, CASE WHEN A.Val1 = B.Val1 THEN 'Yes' ELSE 'No' END AS SameVal1, CASE WHEN A.Val2 = B.Val2 THEN 'Yes' ELSE 'No' END AS SameVal2, CASE WHEN A.Val3 = B.Val3 THEN 'Yes' ELSE 'No' END AS SameVal3FROM (SELECT * FROM @Foo WHERE ID = 1) AS AINNER JOIN (SELECT * FROM @Foo WHERE ID = 2) AS B ON 1 = 1
|
|
|
jim_jim
Constraint Violating Yak Guru
306 Posts |
Posted - 2013-02-27 : 13:22:35
|
Can i ask one more favour pleaseIs the below possible without use of the temporary table. I wanted to use the same logic in Business Objects application but it is failing for the reason that the query uses temporary tablequote: Originally posted by Lamprey Convert the current results to varchar and then union that with the results from my query is one way to do it. DECLARE @Foo TABLE (ID INT, Val1 INT, Val2 DATETIME, Val3 VARCHAR(10))INSERT @FooVALUES(1, 1234, SYSDATETIME(), 'Foo'),(2, 4321, SYSDATETIME(), 'Bar')SELECT CAST(ID AS VARCHAR(MAX)) AS ID, CAST(Val1 AS VARCHAR(MAX)) AS Val1, CAST(Val2 AS VARCHAR(MAX)) AS Val2, CAST(Val3 AS VARCHAR(MAX)) AS Val3FROM @Foo WHERE ID = 1 UNION ALLSELECT CAST(ID AS VARCHAR(MAX)) AS ID, CAST(Val1 AS VARCHAR(MAX)) AS Val1, CAST(Val2 AS VARCHAR(MAX)) AS Val2, CAST(Val3 AS VARCHAR(MAX)) AS Val3FROM @Foo WHERE ID = 2UNION ALLSELECT CASE WHEN A.ID = B.ID THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val1 = B.Val1 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val2 = B.Val2 THEN 'Yes' ELSE 'No' END, CASE WHEN A.Val3 = B.Val3 THEN 'Yes' ELSE 'No' ENDFROM (SELECT * FROM @Foo WHERE ID = 1) AS AINNER JOIN (SELECT * FROM @Foo WHERE ID = 2) AS B ON 1 = 1
|
|
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2013-02-27 : 13:29:58
|
Yeah, the temp table is only for the sample data. It's one of the basic things you should provide when asking a database question. But, it is not required for your implementation. Here are some links about how to ask database questions that might hlpe you understand why I posted sample data:http://www.sqlservercentral.com/articles/Best+Practices/61537/http://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspx |
|
|
jim_jim
Constraint Violating Yak Guru
306 Posts |
Posted - 2013-02-27 : 13:44:04
|
Thank You so muchquote: Originally posted by Lamprey Yeah, the temp table is only for the sample data. It's one of the basic things you should provide when asking a database question. But, it is not required for your implementation. Here are some links about how to ask database questions that might hlpe you understand why I posted sample data:http://www.sqlservercentral.com/articles/Best+Practices/61537/http://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspx
|
|
|
|
|
|
|
|