Select meio estranho para fazer

SQL Server

29/04/2012

Tenho uma tabela com 800 linhas. Serão inseridas mais 5.000 nela. Tenho um campo que guarda um registro assim: YYYYMM. Eu gostaria de fazer um select, que me trouxesse um valor tipo valor = 1, para todos os registros assim:
201104. Se houver registros do tipo:
201104 e 201103, ele traz o valor = 2. Se houver
201104 ,201103,201102,201101, aí ele traz o valor = 4 e assim sucessivamente. Como eu faço isso na query?
Pjava

Pjava

Curtidas 0

Respostas

Bruno Leandro

Bruno Leandro

29/04/2012

não entendi bem, é um campo com varias datas data1,data2,data3 ou outra forma
GOSTEI 0
Deivison Melo

Deivison Melo

29/04/2012

Utilize o comando: CASE

Exemplo:

SELECT au_fname, au_lname,
CASE state
WHEN CA THEN California
WHEN KS THEN Kansas
WHEN TN THEN Tennessee
WHEN OR THEN Oregon
WHEN MI THEN Michigan
WHEN IN THEN Indiana
WHEN MD THEN Maryland
WHEN UT THEN Utah
END AS StateName
FROM pubs.dbo.authors
ORDER BY au_lname

Espero ter ajudado!!!


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

29/04/2012

deve ser algo assim

select count(distinct campo) tipos from tabela

daí você pega o conteúdo de tipos e sabe quantos tipos estão contidos na tabela.
GOSTEI 0
Jair N.

Jair N.

29/04/2012

CREATE FUNCTION TO_CHAR(@Imput SQL_VARIANT, @Format VARCHAR(55))
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @Result VARCHAR(255)

SET @Format = UPPER(@Format)

IF (ISDATE(CAST(@Imput AS VARCHAR)) = 1)
BEGIN -- 00 0 Nihill
IF (@Format = MM/DD/YYYY)
SET @Result = CONVERT(CHAR(10), @Imput, 101)
ELSE -- 02 102 ANSI
IF (@Format = YY.MM.DD )
SET @Result = CONVERT(CHAR(08), @Imput, 102)
ELSE -- 03 103 British/French
IF (@Format = DD/MM/YYYY )
SET @Result = CONVERT(CHAR(10), @Imput, 103)
ELSE -- 04 104 German
IF (@Format = DD.MM.YY )
SET @Result = CONVERT(CHAR(08), @Imput, 104)
ELSE -- 05 105 Italian
IF (@Format = DD-MM-YY )
SET @Result = CONVERT(CHAR(08), @Imput, 105)
ELSE -- 08 108 Hour Minute Seg
IF (@Format = HH:MI:SS )
OR (@Format = HH:MM:SS )
SET @Result = CONVERT(CHAR(08), @Imput, 108)
ELSE -- 10 110 USA
IF (@Format = MM-DD-YY )
SET @Result = CONVERT(CHAR(08), @Imput, 110)
ELSE -- 11 111 JAPAN
IF (@Format = YY/MM/DD )
SET @Result = CONVERT(CHAR(08), @Imput, 111)
ELSE -- 12 112 ISO YYMMDD
IF (@Format = YYYYMMDD )
SET @Result = CONVERT(CHAR(08), @Imput, 112)
ELSE -- 14 114 ODBC
IF (@Format = HH:MI:SS:MMM)
OR (@Format = HH:MM:SS:MMM)
SET @Result = CONVERT(CHAR(12), @Imput, 114)
ELSE -- 20 120 ODBC canonical
IF (@Format = YYYY-MM-DD HH:MI:SS)
OR (@Format = YYYY-MM-DD HH:MM:SS)
SET @Result = CONVERT(CHAR(20), @Imput, 120)
ELSE -- 21 121 ODBC canonical (with milliseconds)
IF (@Format = YYYY-MM-DD HH:MI:SS.MMM)
OR (@Format = YYYY-MM-DD HH:MM:SS.MMM)
SET @Result = CONVERT(CHAR(24), @Imput, 121)
ELSE --XX 0 Default
SET @Result = CONVERT(CHAR(10), @Imput, 120)
END
ELSE
IF (ISNUMERIC(CAST(@Imput AS VARCHAR)) = 1)
BEGIN
IF (@Format = )
SET @Result = CONVERT(VARCHAR(255), @Imput)
ELSE
SET @Result = LTRIM(STR(CAST(@Imput AS FLOAT), 255, LEN(@Format) - CHARINDEX(., @Format)))
END

RETURN @Result

END
GO
GOSTEI 0
POSTAR