Мне нужно добавить конкатенированное поле в мое предложение SELECT, основанное на результатах моего предложения WHERE. Вот мой текущий запрос:SQL CASE в предложении SELECT
Declare
@Low numeric(13,0) = 10000,
@High numeric(13,0) = 100000000000,
@Name varchar(100) = '%',
@Stname varchar(100) = '%georgia',
@Sumlev varchar(3) = 1,
@County varchar(30) = 123456,
@Place varchar (5) = 8,
@Gid2 varchar(5),
@Gid2_1 varchar (7);
if object_id('tempdb..#GeoID2') is not null drop table #GeoID2
SELECT
SUMLEV, State, County, Place, Name, Stname, ESTIMATESBASE2010, CONCAT(REPLICATE('0', 2 - LEN(STATE)) + STATE, REPLICATE('0', 3 - LEN(COUNTY)) + COUNTY) AS Gid2
INTO
#GeoID2
FROM
[CensusData].[dbo].[SUB-EST2014_ALL]
WHERE
(NOT (SUMLEV = @Sumlev)) AND (NOT (County = @County)) AND (NOT (PLACE = @Place)) AND
(ESTIMATESBASE2010 > @Low) AND (ESTIMATESBASE2010 < @High) AND (Name LIKE @Name) and (Stname LIKE @Stname)
SELECT
[#GeoID2].SUMLEV, [#GeoID2].State, [#GeoID2].County, [#GeoID2].Place, [#GeoID2].Stname, [#GeoID2].Name, [#GeoID2].ESTIMATESBASE2010, [ACS_14_5YR_S1901_with_ann].[HC01_EST_VC13] as Avg_Salary, [#GeoID2].Gid2, [#GeoID2].Gid21
FROM
[CensusData].[dbo].[#GeoID2] INNER JOIN
[CensusData].[dbo].[ACS_14_5YR_S1901_with_ann] ON [CensusData].[dbo].[#GeoID2].Gid2 = [CensusData].[dbo].[ACS_14_5YR_S1901_with_ann].[GEO id2]
ORDER BY
[#GeoID2].NAME
Мне нужно добавить саз к моему первому ЗЕЬЕСТА, чтобы присвоить значение Gid2. Текущее значение присваивается как:
CONCAT(REPLICATE('0', 2 - LEN(STATE)) + STATE, REPLICATE('0', 3 - LEN(COUNTY)) + COUNTY) AS Gid2
Что мне нужно сделать, это проверить значение [County], прежде чем я присвоит это значение. Исходя из этого результата, я буду использовать одну из двух формул. Вот что я пытался (это не работает):
Case
When (County = 0)
Then 'CONCAT(REPLICATE('0', 2 - LEN(STATE)) + STATE, REPLICATE('0', 5 - LEN(PLACE)) + PLACE) AS Gid2'
Else 'CONCAT(REPLICATE('0', 2 - LEN(STATE)) + STATE, REPLICATE('0', 3 - LEN(COUNTY)) + COUNTY) AS Gid2'
End
Я не уверен, что с помощью СЛУЧАЙ правильный путь, но я не могу понять, какой-либо другой способ подойти к этому. Может кто-нибудь помочь?
Начнем с того, в вашем случае заявлении„ как Gid2“должен прийти после того, как„конец“ –
FWIW, я думаю, что использовать оператор CASE для этого можно. –
Брайан - хорошая точка на «как Gid2», я переместил его после «end», но я все еще получаю сообщение об ошибке: неправильный синтаксис около «0», – gacto