Select

21/04/2009 - 19:29 por julio | Informe spam
Saludos Grupo, Quiero saber como puedo hacer este select

Tengo

tabla A
ID A
1 10
2 10
3 10
5 5
6 5
7 7
7 3

Necesito un segundo campo que me ponga un 1 en los campos que se repitan y 0
en los que no.

tabla A
ID A B
1 10 1
2 10 1
3 10 1
5 5 1
6 5 1
7 7 0
8 3 0

En el ejemplo el 7 y el 3 no se repiten por eso son igual a 0

gracias

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
21/04/2009 - 19:45 | Informe spam
No dices la versión de SQL Server que tienes, pero una posible solución
podría ser la siguiente:

SELECT t.*, tt.b

FROM tuTabla t INNER JOIN (SELECT CASE COUNT(*) WHEN 1 THEN 0 ELSE 1 END AS
B, a FROM tuTabla GROUP BY a) tt ON t.a = tt.a

ORDER BY t.id


"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil. si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba

"julio" escribió en el mensaje
news:
Saludos Grupo, Quiero saber como puedo hacer este select

Tengo

tabla A
ID A
1 10
2 10
3 10
5 5
6 5
7 7
7 3

Necesito un segundo campo que me ponga un 1 en los campos que se repitan y
0 en los que no.

tabla A
ID A B
1 10 1
2 10 1
3 10 1
5 5 1
6 5 1
7 7 0
8 3 0

En el ejemplo el 7 y el 3 no se repiten por eso son igual a 0

gracias

Respuesta Responder a este mensaje
#2 Alejandro Mesa
21/04/2009 - 20:44 | Informe spam
Julio,

Aqui tienes otras propuestas. Debes analizar cual se desempenia mejor en tu
ambiente.

USE tempdb ;
GO

CREATE TABLE dbo.t (
ID INT NOT NULL,
A INT NOT NULL
);
GO

CREATE UNIQUE NONCLUSTERED INDEX idx_u_nc_A_ID
ON dbo.t(A, ID);
GO

INSERT INTO dbo.t values (1, 10);
INSERT INTO dbo.t values (2, 10);
INSERT INTO dbo.t values (3, 10);
INSERT INTO dbo.t values (5, 5);
INSERT INTO dbo.t values (6, 5);
INSERT INTO dbo.t values (7, 7);
INSERT INTO dbo.t values (8, 3);
GO

SELECT
ID,
A,
CASE WHEN MIN(ID) OVER (PARTITION BY A) = MAX([ID]) OVER (PARTITION BY
A) THEN 0 ELSE 1 END AS B
FROM
dbo.t
ORDER BY
A, ID;

SELECT
ID,
A,
CASE WHEN EXISTS (SELECT * FROM dbo.t AS b WHERE b.A = a.A AND b.ID <>
a.ID) THEN 1 ELSE 0 END AS B
FROM
dbo.t AS a
ORDER BY
A, ID;

SELECT
a.ID,
a.A,
CAST(cnt AS bit) * 1 AS B
FROM
dbo.t AS a
INNER JOIN
(
SELECT A, COUNT(*) - 1 AS cnt
FROM dbo.t
GROUP BY A
) AS b
ON a.A = b.A
ORDER BY
a.A, a.ID;
GO

DROP TABLE dbo.t;
GO


AMB



"julio" wrote:

Saludos Grupo, Quiero saber como puedo hacer este select

Tengo

tabla A
ID A
1 10
2 10
3 10
5 5
6 5
7 7
7 3

Necesito un segundo campo que me ponga un 1 en los campos que se repitan y 0
en los que no.

tabla A
ID A B
1 10 1
2 10 1
3 10 1
5 5 1
6 5 1
7 7 0
8 3 0

En el ejemplo el 7 y el 3 no se repiten por eso son igual a 0

gracias


Respuesta Responder a este mensaje
#3 julio
21/04/2009 - 21:40 | Informe spam
Gracias Alejandro, veo que hay varias manera de poder obtener la
informacion. Tomare una


"Alejandro Mesa" wrote in message
news:
Julio,

Aqui tienes otras propuestas. Debes analizar cual se desempenia mejor en
tu
ambiente.

USE tempdb ;
GO

CREATE TABLE dbo.t (
ID INT NOT NULL,
A INT NOT NULL
);
GO

CREATE UNIQUE NONCLUSTERED INDEX idx_u_nc_A_ID
ON dbo.t(A, ID);
GO

INSERT INTO dbo.t values (1, 10);
INSERT INTO dbo.t values (2, 10);
INSERT INTO dbo.t values (3, 10);
INSERT INTO dbo.t values (5, 5);
INSERT INTO dbo.t values (6, 5);
INSERT INTO dbo.t values (7, 7);
INSERT INTO dbo.t values (8, 3);
GO

SELECT
ID,
A,
CASE WHEN MIN(ID) OVER (PARTITION BY A) = MAX([ID]) OVER (PARTITION BY
A) THEN 0 ELSE 1 END AS B
FROM
dbo.t
ORDER BY
A, ID;

SELECT
ID,
A,
CASE WHEN EXISTS (SELECT * FROM dbo.t AS b WHERE b.A = a.A AND b.ID <>
a.ID) THEN 1 ELSE 0 END AS B
FROM
dbo.t AS a
ORDER BY
A, ID;

SELECT
a.ID,
a.A,
CAST(cnt AS bit) * 1 AS B
FROM
dbo.t AS a
INNER JOIN
(
SELECT A, COUNT(*) - 1 AS cnt
FROM dbo.t
GROUP BY A
) AS b
ON a.A = b.A
ORDER BY
a.A, a.ID;
GO

DROP TABLE dbo.t;
GO


AMB



"julio" wrote:

Saludos Grupo, Quiero saber como puedo hacer este select

Tengo

tabla A
ID A
1 10
2 10
3 10
5 5
6 5
7 7
7 3

Necesito un segundo campo que me ponga un 1 en los campos que se repitan
y 0
en los que no.

tabla A
ID A B
1 10 1
2 10 1
3 10 1
5 5 1
6 5 1
7 7 0
8 3 0

En el ejemplo el 7 y el 3 no se repiten por eso son igual a 0

gracias


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida