SQL Server - Select a varios valores de una misma columna en otra columna alias

 
Vista:
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Select a varios valores de una misma columna en otra columna alias

Publicado por Hunteralberto (13 intervenciones) el 13/03/2017 22:24:38
Saludos colaboradores,

Gracias de antemano por su ayuda.

Soy nuevo en esto y se que me podrán ayudar.

Estoy tratando de hacer un select donde puede poner en dos columnas alias datos que pertenecen a un mismo nombre de columna, pero lo puedo filtrar por un where, ya que la columna type varia.

Esta es la sentencia por separada, la columna check siempre trae el mismo no. de cheque, lo único que varia son los monto "amount" cuando el type es "1", "2" y "18".

select [check], amount from gndsale where type = '81' and dob = '20161215'
select [check], amount from gndsale where type = '2' and dob = '20161215'
select [check], amount from gndsale where type = '18' and dob = '20161215'

Trate de hacerlo en una sentencia así, pero no me funciono:

select [check], amount as totalneto,
(select amount from gndsale where type = '2') as impuesto,
(select amount from gndsale where type = '18') as propina
from gndsale
where type = '81' and dob = '20151215'

.. y me da este error :
La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.

Por favor si me pueden ayudar.

Perdonen cualquier falta de información, soy nuevo por aquí.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 86
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Select a varios valores de una misma columna en otra columna alias

Publicado por Rafael (110 intervenciones) el 14/03/2017 12:11:05
Un par de temas, lo que te devuelve es correcto por que el subquery que pones
(select amount from gndsale where type = '2') as impuesto,
No incluye la condicion para el campo DOB...

Ni tampoco en el caso de
(select amount from gndsale where type = '18') as propina

Yo lo haria de este modo

1
2
3
4
5
6
7
8
SELECT [CHECK]
     , SUM(CASE WHEN TYPE = '81' THEN AMOUNT ELSE 0 END) AS TOTALNETO
     , SUM(CASE WHEN TYPE = '2'  THEN AMOUNT ELSE 0 END) AS IMPUESTO
     , SUM(CASE WHEN TYPE = '18' THEN AMOUNT ELSE 0 END) AS PROPINA
FROM   GNDSALE
WHERE  TYPE IN ('81', '2', '18')
AND    DOB = '20161215'
GROUP  BY [CHECK]

Espero te sirva...

Saludos
pd. Si la información te sirve a mi me sirve un +1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Select a varios valores de una misma columna en otra columna alias

Publicado por Hunteralberto (13 intervenciones) el 14/03/2017 14:44:39
Saludos Rafael,

Excelente, exactamente lo que necesitaba.

Ahora tratare de entender como se usa el CASE, porque el SUM es para sumarlo, cierto?

El +1 se da en "Valora esta respuesta"?

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 86
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Select a varios valores de una misma columna en otra columna alias

Publicado por Rafael (110 intervenciones) el 16/03/2017 08:29:55
Te explico ...

El CASE es una estructura de comparacion ...

Su traduccion podria ser en CASO de que SE CUMPLA esto ENTONCES has esto si no se cumple nada has esto...

De tal modo que puedes tener algo asi
1
2
3
4
5
6
7
...
CASE
WHEN a=1 THEN 'A es UNO'
WHEN a=2 THEN 'A es DOS'
ELSE 'A es NO es ni 1 ni 2'
END
...

Luego entonces ....
Sabemos que tu tabla tiene los datos en "n" registros ... si no hicieras el sum los datos quedarian en esos "n" registros ejemplo
1
2
3
4
CHECK    TOTALNETO   IMPUESTO   PROPINA
    1            1          0         0   --> Cuando es 81
    1            0          1         0   --> Cuando es 2
    1            0          0         1   --> Cuando es 18

Por que le hemos dicho que si el campo type es 81 lo ponga en la columna totalneto si no lo es ponga un cero...
Y lo mismo con el resto de type's pero en distintas columnas...

Si lo sumas como el resto de los valores los hemos asignado a ceros... te queda en una sola linea...

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar