add a named Column to where statement

See attached text file.  I am trying to add in a named colum to my where clause to make it work correctly.  All of this select goes into a datagrid for presentation.
Help.txt
kdeutschAsked:
Who is Participating?
 
ralmadaConnect With a Mentor Commented:
Are you SQL 2005? ";with" only works in SQL 2005. If not try this:


Select * from (
SELECT	at.UPC as UIC, 
	ut.Addr_City as City,
	at.Auth_Para_Dsg as PARA, 
	at.Auth_Line_Dsg as LINE, 
	at.GRADE, 
	substring(at.POSC, 1,4) as DMOS,
	case at.AUTH_PERS_IDENT when 'E' then 'M' when 'W' then 'M' when 'O' then 'M' else 'I' end GENDER, 
	at.AUTH_STR,
	CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end  END AS OS,
	at.ASGN_STR,
	at.AUTH_STR + CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END AS VAC,
	case substring(at.DOC_NBR, 1, 2) when 'NG' then 'TDA' else 'MTOE' End as UNIT_Type,  
	case st.strStat when 'L' then 'Locked' when 'C' then 'Critical' Else '' end as UNIT_Stat
FROM    PERS_UNIT_TBL as ut Inner join
	PERS_AUTH_STR_TBL as at on at.UPC = ut.UPC Left Outer Join
	DotNet.dbo.tblStatUic as st on st.strUIc = at.UPC
where	Substring(at.grade, 1,1) = 'E' and at.UPC = '77726'
) FilterVac
where VAC > '0'
Order by UIC, PARA, LINE

Open in new window

0
 
usachrisk1983Commented:
It looks like you're trying to say when both your case condition is met and when your substring > 0.  If this is the case, try the following snippet.

SELECT	at.UPC as UIC, 
	ut.Addr_City as City,
	at.Auth_Para_Dsg as PARA, 
	at.Auth_Line_Dsg as LINE, 
	at.GRADE, 
	substring(at.POSC, 1,4) as DMOS,
	case at.AUTH_PERS_IDENT when 'E' then 'M' when 'W' then 'M' when 'O' then 'M' else 'I' end GENDER, 
	at.AUTH_STR,
	CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end  END AS OS,
	at.ASGN_STR,
	at.AUTH_STR + CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END AS VAC,
	case substring(at.DOC_NBR, 1, 2) when 'NG' then 'TDA' else 'MTOE' End as UNIT_Type,  
	case st.strStat when 'L' then 'Locked' when 'C' then 'Critical' Else '' end as UNIT_Stat
FROM    PERS_UNIT_TBL as ut Inner join
	PERS_AUTH_STR_TBL as at on at.UPC = ut.UPC Left Outer Join
	DotNet.dbo.tblStatUic as st on st.strUIc = at.UPC
where	Substring(at.grade, 1,1) = 'E' and at.UPC = '77726'
  and at.AUTH_DOC_POSN_TITLE like '%(%)%'
  and substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END > 0
Order by at.UPC, at.Auth_Para_Dsg, at.Auth_Line_Dsg

Open in new window

0
 
usachrisk1983Commented:
The other way I could read your question is that if auth_doc_posn_title is like '%(%)%' then you want to check the substring and include >0, otherwise if auth_doc_posn_title isn't like that, don't bother checking the substring and include it anyway.  If this is what you're looking for, try the below instead.

SELECT	at.UPC as UIC, 
	ut.Addr_City as City,
	at.Auth_Para_Dsg as PARA, 
	at.Auth_Line_Dsg as LINE, 
	at.GRADE, 
	substring(at.POSC, 1,4) as DMOS,
	case at.AUTH_PERS_IDENT when 'E' then 'M' when 'W' then 'M' when 'O' then 'M' else 'I' end GENDER, 
	at.AUTH_STR,
	CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end  END AS OS,
	at.ASGN_STR,
	at.AUTH_STR + CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END AS VAC,
	case substring(at.DOC_NBR, 1, 2) when 'NG' then 'TDA' else 'MTOE' End as UNIT_Type,  
	case st.strStat when 'L' then 'Locked' when 'C' then 'Critical' Else '' end as UNIT_Stat
FROM    PERS_UNIT_TBL as ut Inner join
	PERS_AUTH_STR_TBL as at on at.UPC = ut.UPC Left Outer Join
	DotNet.dbo.tblStatUic as st on st.strUIc = at.UPC
where Substring(at.grade, 1,1) = 'E' and at.UPC = '77726'
  and ((at.AUTH_DOC_POSN_TITLE like '%(%)%' and substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END > 0)
   or (at.AUTH_DOC_POSN_TITLE not like '%(%)%'))
Order by at.UPC, at.Auth_Para_Dsg, at.Auth_Line_Dsg

Open in new window

0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
kdeutschAuthor Commented:
I keep getting an error of incorrect syntax near else on line 22.
I tired something like taht before but received 0 records.
0
 
pcelbaCommented:
The CASE structure is allowed in WHEN clause, so you should look at its values first and then you may decide if it works or not.
0
 
kdeutschAuthor Commented:
Hi I provided some data, it might provide more insight.
Help2.txt
0
 
pcelbaCommented:
You have duplicate END in your case, try this WHERE:

where      Substring(at.grade, 1,1) = 'E' and at.UPC = '77726'
and       case when at.AUTH_DOC_POSN_TITLE like '%(%)%'
        then substring(at.AUTH_DOC_POSN_TITLE,
                       1 + charindex('(', at.AUTH_DOC_POSN_TITLE),
                       charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1))
        else '0' end - at.ASGN_STR > 0
0
 
ralmadaCommented:
You can put that in a CTE expression. Try this:

;with FilterVAC as (
SELECT	at.UPC as UIC, 
	ut.Addr_City as City,
	at.Auth_Para_Dsg as PARA, 
	at.Auth_Line_Dsg as LINE, 
	at.GRADE, 
	substring(at.POSC, 1,4) as DMOS,
	case at.AUTH_PERS_IDENT 
		when 'E' then 'M' 
		when 'W' then 'M' 
		when 'O' then 'M' 
		else 'I' end GENDER, 
	at.AUTH_STR,
	CASE WHEN  ISNUMERIC(case when at.AUTH_DOC_POSN_TITLE like '%(%)%' 
					then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', 						at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) 
				else '0' end ) = 0 THEN 0 
	ELSE 
		case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end  END AS OS,
	at.ASGN_STR,
	at.AUTH_STR + CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END AS VAC,
	case substring(at.DOC_NBR, 1, 2) when 'NG' then 'TDA' else 'MTOE' End as UNIT_Type,  
	case st.strStat when 'L' then 'Locked' when 'C' then 'Critical' Else '' end as UNIT_Stat
FROM    PERS_UNIT_TBL as ut Inner join
	PERS_AUTH_STR_TBL as at on at.UPC = ut.UPC Left Outer Join
	DotNet.dbo.tblStatUic as st on st.strUIc = at.UPC
where	Substring(at.grade, 1,1) = 'E' and at.UPC = '77726'
Order by at.UPC, at.Auth_Para_Dsg, at.Auth_Line_Dsg
)
select * from FilterVac
where VAC > 0

Open in new window

0
 
pcelbaCommented:
You can use your select as subquery:
SELECT * FROM (
SELECT	at.UPC as UIC, 
	ut.Addr_City as City,
	at.Auth_Para_Dsg as PARA, 
	at.Auth_Line_Dsg as LINE, 
	at.GRADE, 
	substring(at.POSC, 1,4) as DMOS,
	case at.AUTH_PERS_IDENT when 'E' then 'M' when 'W' then 'M' when 'O' then 'M' else 'I' end GENDER, 
	at.AUTH_STR,
	CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end  END AS OS,
	at.ASGN_STR,
	at.AUTH_STR + CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END AS VAC,
	case substring(at.DOC_NBR, 1, 2) when 'NG' then 'TDA' else 'MTOE' End as UNIT_Type,  
	case st.strStat when 'L' then 'Locked' when 'C' then 'Critical' Else '' end as UNIT_Stat
FROM    PERS_UNIT_TBL as ut Inner join
	PERS_AUTH_STR_TBL as at on at.UPC = ut.UPC Left Outer Join
	DotNet.dbo.tblStatUic as st on st.strUIc = at.UPC
where	Substring(at.grade, 1,1) = 'E' and at.UPC = '77726') SUBQ
WHERE SUBQ.VAC > 0

Open in new window

0
 
kdeutschAuthor Commented:
pcelba
Tried taht and it always comes up with zero records,  from the sampling I showed it should come up with a few.

ralmada, these are the errors on this script
Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ';'.
Msg 156, Level 15, State 1, Line 29
Incorrect syntax near the keyword 'Order'.
0
 
ralmadaCommented:

;with FilterVAC as (
SELECT	at.UPC as UIC, 
	ut.Addr_City as City,
	at.Auth_Para_Dsg as PARA, 
	at.Auth_Line_Dsg as LINE, 
	at.GRADE, 
	substring(at.POSC, 1,4) as DMOS,
	case at.AUTH_PERS_IDENT when 'E' then 'M' when 'W' then 'M' when 'O' then 'M' else 'I' end GENDER, 
	at.AUTH_STR,
	CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end  END AS OS,
	at.ASGN_STR,
	at.AUTH_STR + CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END AS VAC,
	case substring(at.DOC_NBR, 1, 2) when 'NG' then 'TDA' else 'MTOE' End as UNIT_Type,  
	case st.strStat when 'L' then 'Locked' when 'C' then 'Critical' Else '' end as UNIT_Stat
FROM    PERS_UNIT_TBL as ut Inner join
	PERS_AUTH_STR_TBL as at on at.UPC = ut.UPC Left Outer Join
	DotNet.dbo.tblStatUic as st on st.strUIc = at.UPC
where	Substring(at.grade, 1,1) = 'E' and at.UPC = '77726'
)
Select * from FilterVac
where VAC > '0'
Order by at.UPC, at.Auth_Para_Dsg, at.Auth_Line_Dsg

Open in new window

0
 
ralmadaCommented:
sorry
;with FilterVAC as (
SELECT	at.UPC as UIC, 
	ut.Addr_City as City,
	at.Auth_Para_Dsg as PARA, 
	at.Auth_Line_Dsg as LINE, 
	at.GRADE, 
	substring(at.POSC, 1,4) as DMOS,
	case at.AUTH_PERS_IDENT when 'E' then 'M' when 'W' then 'M' when 'O' then 'M' else 'I' end GENDER, 
	at.AUTH_STR,
	CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end  END AS OS,
	at.ASGN_STR,
	at.AUTH_STR + CASE WHEN  ISNUMERIC( case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end ) = 0 THEN 0 
	ELSE 
	case when at.AUTH_DOC_POSN_TITLE like '%(%)%' then substring(at.AUTH_DOC_POSN_TITLE, 1 + charindex('(', at.AUTH_DOC_POSN_TITLE), charindex(')', at.AUTH_DOC_POSN_TITLE)  - (charindex('(', at.AUTH_DOC_POSN_TITLE) + 1)) else '0' end - at.ASGN_STR END AS VAC,
	case substring(at.DOC_NBR, 1, 2) when 'NG' then 'TDA' else 'MTOE' End as UNIT_Type,  
	case st.strStat when 'L' then 'Locked' when 'C' then 'Critical' Else '' end as UNIT_Stat
FROM    PERS_UNIT_TBL as ut Inner join
	PERS_AUTH_STR_TBL as at on at.UPC = ut.UPC Left Outer Join
	DotNet.dbo.tblStatUic as st on st.strUIc = at.UPC
where	Substring(at.grade, 1,1) = 'E' and at.UPC = '77726'
)
Select * from FilterVac
where VAC > '0'
Order by UPC, Auth_Para_Dsg, Auth_Line_Dsg

Open in new window

0
 
kdeutschAuthor Commented:

ralmada:  Still getting this erro, tried to remove but brings more error, i tired single quote on select asl well with no result.

Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ';'.
0
 
kdeutschAuthor Commented:
argh,
My development is in sql 2000 but prodcution is in sql 2005.
0
 
ralmadaCommented:
Well, you can use my last approach. It will work in both SQL 2000 and 2005.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.