Author |
Topic |
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 13:07:03
|
Hi,The below query needs teh result combined. I tried UNION but it did not help. I get the result as below but I believed UNION could help solve this. What am I doing wrong?DECLARE @HideEntityDetails TABLE (UDFTransID int, HideEntityDetails bit) INSERT INTO @HideEntityDetailsSELECT OwnerID as UDFTransID, Convert(bit,UDFValue) FROM dbo.GFS_FN_GetUDFValues('Transfer','HideEntityDetails')--UNIONSELECT t.TransferID AS UDFTransID,hed.HideEntityDetails from @HideEntityDetails hed LEFT JOIN Transfers t ON hed.UDFTransID = t.ParentTransferID WHERE t.StatusID = 6select * from @HideEntityDetailsUDFTransID HideEntityDetails14784 114785 1UDFTransID HideEntityDetails14759 133246 133251 1 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 13:18:24
|
I also forgot to mention that I am using SQL 2005. Also the first select is from a function. Does UNION work with multi selects from function and table?Thankssqlnovice123 |
 |
|
Sachin.Nand
2937 Posts |
Posted - 2010-07-28 : 13:29:43
|
DECLARE @HideEntityDetails TABLE (UDFTransID int, HideEntityDetails bit)INSERT INTO @HideEntityDetailsSELECTOwnerID as UDFTransID, Convert(bit,UDFValue)FROMdbo.GFS_FN_GetUDFValues('Transfer','HideEntityDetails')INSERT INTO @HideEntityDetailsSELECT t.TransferID AS UDFTransID,hed.HideEntityDetails from @HideEntityDetails hedLEFT JOIN Transfers tON hed.UDFTransID = t.ParentTransferIDWHERE t.StatusID = 6select * from @HideEntityDetailsLimitations live only in our minds. But if we use our imaginations, our possibilities become limitless. PBUH |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 13:34:31
|
Hi, I did the same thing but my Boss felt that it is inefficient. Seems there is a beter way to write the query without the second INSERT.Thankssqlnovice123 |
 |
|
Sachin.Nand
2937 Posts |
Posted - 2010-07-28 : 13:45:00
|
Cant you do a join with of UDF & table transfer?Something like thisDECLARE @HideEntityDetails TABLE (UDFTransID int, HideEntityDetails bit)INSERT INTO @HideEntityDetailsSELECTOwnerID as UDFTransID, Convert(bit,UDFValue)FROMdbo.GFS_FN_GetUDFValues('Transfer','HideEntityDetails')hedLEFT JOIN Transfers tON hed.UDFTransID = t.ParentTransferIDWHERE t.StatusID = 6 Since I have no I idea on what your data looks like its just a shot in the dark.Limitations live only in our minds. But if we use our imaginations, our possibilities become limitless. PBUH |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 13:54:11
|
I get the below error:Msg 207, Level 16, State 1, Line 10Invalid column name 'UDFTransID'.Just so you know this is teh function:set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[GFS_FN_GetUDFValues] (@udfLevel nvarchar(30), @udfCode nvarchar(100))RETURNS TABLE ASRETURN SELECT DF.PshipID ,DF.OwnerID ,DF.UDFValue ,DF.SubEntityID ,DF.InvestorClassID ,FI.[Type] ,VAL.UDFItemChoiceValue ,VAL.UDFItemChoiceOrder FROM UserDefinedFieldItem FI INNER JOIN UserDefinedField DF ON FI.UDFItemID = DF.UDFItemID LEFT JOIN UserDefinedFieldItemChoice VAL on DF.UDFValue = VAL.UDFItemChoiceID WHERE FI.UDFLevel = @udfLevel AND FI.UDFCode = upper(@udfCode)The Transfers table has UDFTransID defined as an INT type. |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 13:57:52
|
Is there a way to get it to work with a subquery? If there is not otehr way other than the double INSERT then I guess I will stick to that approach.Thankssqlnovice123 |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 14:32:19
|
I tried taking the SQL from teh function and just combined with UNION as one combines two SQL queries. It still returns 3 rows as opposed to 5 that I should see, not sure why?DECLARE @udfLevel nvarchar(30)DECLARE @udfCode nvarchar(100) SET @udfLevel = 'Transfer'SET @udfCode = 'HideEntityDetails'DECLARE @HideEntityDetails TABLE (UDFTransID int, HideEntityDetails bit)SELECT DF.OwnerID ,Convert(bit,DF.UDFValue) FROM UserDefinedFieldItem FI INNER JOIN UserDefinedField DF ON FI.UDFItemID = DF.UDFItemID LEFT JOIN UserDefinedFieldItemChoice VAL on DF.UDFValue = VAL.UDFItemChoiceID WHERE FI.UDFLevel = @udfLevel AND FI.UDFCode = upper(@udfCode)UNIONSELECT t.TransferID AS UDFTransID,hed.HideEntityDetails from @HideEntityDetails hed LEFT JOIN Transfers t ON t.ParentTransferID = hed.UDFTransID--hed.UDFTransID = t.ParentTransferID WHERE t.StatusID = 6select * from @HideEntityDetailsOwnerID (No column name)14759 133246 133251 1I need to get the belowUDFTransID HideEntityDetails14759 133246 133251 114784 114785 1 |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 15:05:25
|
Could it be that UNION does not work with table variables? It does not make sense, but yet it seems simple. I have worked with unions on temp and work tables, but not with selects from function or table variables.Any help is really appreciated. I am told to get this to work.Thankssqlnovice123 |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 15:18:10
|
Could it have anything to do with the settings on SQL? Even the below query does not work with UNION and it should as it uses temp tables?drop table #HideEntityDetailsDECLARE @HideEntityDetails TABLE (UDFTransID int, HideEntityDetails bit)CREATE TABLE #HideEntityDetails(UDFTransID int, HideEntityDetails bit) --INSERT INTO #HideEntityDetails SELECT OwnerID as UDFTransID, Convert(bit,UDFValue) FROM dbo.GFS_FN_GetUDFValues('Transfer','HideEntityDetails')--select * from #HideEntityDetailsUNIONSELECT t.TransferID AS UDFTransID,hed.HideEntityDetails AS HideEntityDetails FROM #HideEntityDetails hedLEFT JOIN Transfers tON hed.UDFTransID = t.ParentTransferIDWHERE t.StatusID = 6 |
 |
|
vijayisonly
Master Smack Fu Yak Hacker
1836 Posts |
Posted - 2010-07-28 : 15:33:54
|
You have commented the INSERT into #HideEntityDetails in the first query....and you are trying to Join with #HideEntityDetails in the second SELECT which wont give you any rows...as #HideEntityDetails is empty?? Or am I missing something? |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 15:39:24
|
Sorry that was a typo.drop table #HideEntityDetailsCREATE TABLE #HideEntityDetails(UDFTransID int, HideEntityDetails bit) INSERT INTO #HideEntityDetails SELECT OwnerID as UDFTransID, Convert(bit,UDFValue) AS HideEntityDetails FROM dbo.GFS_FN_GetUDFValues('Transfer','HideEntityDetails')UNIONSELECT t.TransferID AS UDFTransID,hed.HideEntityDetails AS HideEntityDetailsFROM #HideEntityDetails hedLEFT JOIN Transfers tON hed.UDFTransID = t.ParentTransferIDWHERE t.StatusID = 6select * from #HideEntityDetailsThe above query gives me only three rows as opposed to 5 rows that I am expecting as was the case when I used two inserts.UDFTransID HideEntityDetails14759 133246 133251 1should give me UDFTransID HideEntityDetails14759 133246 133251 114784 114785 1 |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 15:58:36
|
Initially I presumed one cannot use UNION with selects from a function and a table variable. So I used UNION with select from a function and a temp table. This still does not give the result set that I need. Is teh function the cause or has it to do with my settings. Is there another option that I can use?Thankssqlnovice123 |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 16:15:01
|
I tried the subquery approach but that did not work. I get a syntax error.SELECT t.TransferID AS UDFTransID,hed.HideEntityDetails AS HideEntityDetailsINTO #HideEntityDetailsFROM (SELECT OwnerID as UDFTransID, Convert(bit,UDFValue) AS HideEntityDetails INTO #HideEntityDetails FROM dbo.GFS_FN_GetUDFValues('Transfer','HideEntityDetails')) AS dLEFT JOIN Transfers tON d.UDFTransID = t.ParentTransferIDWHERE t.StatusID = 6Msg 156, Level 15, State 1, Line 6Incorrect syntax near the keyword 'INTO'. |
 |
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2010-07-28 : 16:58:17
|
I just did a quick scan, but will this work?SELECT t.TransferID AS UDFTransID, hed.HideEntityDetails from ( SELECT OwnerID as UDFTransID, Convert(bit,UDFValue) AS HideEntityDetails FROM dbo.GFS_FN_GetUDFValues('Transfer','HideEntityDetails')) AS hedLEFT JOIN Transfers t ON hed.UDFTransID = t.ParentTransferIDWHERE t.StatusID = 6 |
 |
|
sqlnovice123
Constraint Violating Yak Guru
262 Posts |
Posted - 2010-07-28 : 17:23:38
|
I used a CASE statementSELECT UDFTransID = CASE WHEN fn.OwnerID = t.ParentTransferID THEN t.TransferID ELSE fn.OwnerID END , HideEntityDetails = Convert(bit,UDFValue)FROM dbo.GFS_FN_GetUDFValues('Transfer','HideEntityDetails') fnLEFT JOIN Transfers tON fn.OwnerID = t.ParentTransferIDAND t.StatusID = 6UDFTransID HideEntityDetails14784 114785 133251 133246 1 |
 |
|
|