**** Actualización: **consulta SQL Server agrupados por valor máximo en la columna de
mediante el Ranking() sobre la sintaxis de partición disponible en MS SQL Server 2005 en efecto, que me señale en la dirección correcta, que (o tal vez debería escribir "I") no puede darme los resultados que necesito sin recurrir a la enumeración de filas en el código.
Por ejemplo, si seleccionamos TOP (1) de la fila, me sale sólo un valor, es decir., La ranura 1. Si utilizo MAX(), entonces me da el valor mejor clasificado para cada ranura .. .que, en mi caso, no funciona, porque si el valor superior de la ranura 2 es NULL, pero está al lado del valor MAX no está vacío, ese es el que yo quiero.
Por lo tanto, no pudiendo encontrar una solución completamente T-SQL, he recurrido a filtrar tanto como sea posible en SQL y luego a enumerar los resultados en código en el lado del cliente.
original:
He estado golpeando advanced T-SQL books, Stackoverflow Google y tratando de encontrar la manera de manejar esta consulta, ya sea mediante el uso de pivotes o mediante el uso de funciones analíticas. Hasta ahora, no he acertado en la combinación correcta.
Tengo programas que están clasificados (mayor valor, mayor precedencia). Cada horario tiene una lista de reproducción de un cierto número de ranuras numeradas con archivos.
Lo que necesito hacer es alinear todos los programas y sus listas de reproducción asociadas, y para cada ranura, tomar el archivo del programa que tenga el valor de clasificación más alto.
así, si tuviera una consulta para un cliente específico con una unión entre las listas de reproducción y los horarios, ordenados por Schedule.Rank DESC, así:
PlaylistId Schedule.Rank SlotNumber FileId
100 100 1 1001
100 100 2 NULL
100 100 3 NULL
200 80 1 1101
200 80 2 NULL
200 80 3 NULL
300 60 1 1201
300 60 2 NULL
300 60 3 2202
400 20 1 1301
400 20 2 2301
400 20 3 NULL
partir de esto, tengo que encontrar la fileid para la fila clasificada MAX por número de ranura:
SlotNumber FileId Schedule.Rank
1 1001 100
2 2301 20
3 2202 60
¿Alguna idea sobre cómo hacer esto?
definiciones de la tabla a continuación:
CREATE TABLE dbo.Playlists(
id int NOT NULL)
CREATE TABLE dbo.Customers(
id int NOT NULL,
name nchar(10) NULL)
CREATE TABLE dbo.Schedules(
id int NOT NULL,
rank int NOT NULL,
playlistid int NULL,
customerid int NULL)
CREATE TABLE dbo.PlaylistSlots(
id int NOT NULL,
slotnumber int NOT NULL,
playlistid int NULL,
fileid int NULL)
+1 solo porque es TAN agradable ver una pregunta hecha de vez en cuando, con todas las tablas relevantes y todo - gracias !!! -) –
Por cierto, el pivote no tiene mucho que ver con eso (eso es acerca de "voltear" cosas para que los valores de fila se conviertan en columnas), así que estoy editando en consecuencia. –
No estoy seguro de si el libro al que se refiere es bueno. Pruebe estos: http://www.sql.co.il/ –