Principale utente con più risposte
Come estrarre una precisa sequenza di valori da una tabella

Domanda
-
Salve Ragazzi
vorrei sapere se c'e un sistema per estrarre una precisa sequenza di valori da una tabella.
Ho inserito una sequenza di dati il risultato che vorrei ottenere sarebbe IDPROFILE 1
Passando una sequenza di valori esempio '1,2,3,4' vorrei estrarre quale è l'idprofile che contiene questa esatta lista di valori.
come potete notare la lista 1,2,3,4 è contenuta anche in altri IDPROFILE, ma solo il numero 1 contiene solamente 1 2 3 4.
Spero di essere stato chiaro
Grazie del vostro aiuto
GianPiero
CREATE TABLE #PROFILEDETAILS (IDPROFILE INT, IDSENDER INT)
INSERT INTO #PROFILEDETAILS VALUES
(1,1),
(1,2),
(1,3),
(1,4),
(2,1),
(2,2),
(2,6),
(3,1),
(3,2),
(3,5),
(3,6),
(3,7),
(3,9),
(3,10),
(4,1),
(4,2),
(4,3),
(4,4),
(4,5),
(4,6),
(4,7),
(4,10),
(4,11),
(4,14),
(5,1),
(5,2),
(5,6),
(5,8),
(5,9),
(5,10),
(5,11),
(5,14),
(6,1),
(6,2),
(6,5),
(6,6),
(6,9),
(6,10),
(7,1),
(7,2),
(7,6),
(7,9),
(7,10),
(7,12),
(8,1),
(8,2),
(8,5),
(8,6),
(8,7),
(8,9),
(8,10),
(8,11),
(8,14),
(9,1),
(9,2),
(9,6),
(9,8),
(9,10),
(10,1),
(10,2),
(10,5),
(10,6),
(10,9),
(10,10),
(11,1),
(11,2),
(11,3),
(11,4),
(11,5),
(11,6),
(11,7),
(11,9),
(11,10),
(11,11),
(11,14),
(12,1),
(12,2),
(12,5),
(12,6),
(12,7),
(12,9),
(12,10),
(12,11),
(12,14),
(13,1),
(13,2),
(13,3),
(13,4),
(13,5),
(13,6),
(13,7),
(13,8),
(13,9),
(13,10),
(13,11),
(13,12),
(13,14),
(14,1),
(14,2),
(14,6),
(14,10),
(14,11),
(14,14),
(15,1),
(15,2),
(15,6),
(15,8)
SELECT * FROM #PROFILEDETAILS
DROP TABLE #PROFILEDETAILS
Risposte
-
Ciao!
Buttata giù al volo, va ottimizzata e testata, fai sapere!
(mi piacerebbe trovare anche qualcosa di più elegante)
CREATE TABLE #Valori (IDSENDER int) INSERT INTO #Valori VALUES (1),(2),(3),(4) DECLARE @numValori int = (SELECT COUNT(*) FROM #Valori); WITH Tabella AS ( SELECT p.IDPROFILE, SUM(valori.OK) as numOK, COUNT(*) as num FROM #PROFILEDETAILS p OUTER APPLY (SELECT 1 as OK FROM #Valori v WHERE v.IDSENDER = p.IDSENDER) as valori GROUP BY p.IDPROFILE) SELECT IDPROFILE FROM Tabella WHERE num = @numValori AND numOK = @numValori
- Contrassegnato come risposta brggpr sabato 11 febbraio 2017 18:11
Tutte le risposte
-
Ciao!
Buttata giù al volo, va ottimizzata e testata, fai sapere!
(mi piacerebbe trovare anche qualcosa di più elegante)
CREATE TABLE #Valori (IDSENDER int) INSERT INTO #Valori VALUES (1),(2),(3),(4) DECLARE @numValori int = (SELECT COUNT(*) FROM #Valori); WITH Tabella AS ( SELECT p.IDPROFILE, SUM(valori.OK) as numOK, COUNT(*) as num FROM #PROFILEDETAILS p OUTER APPLY (SELECT 1 as OK FROM #Valori v WHERE v.IDSENDER = p.IDSENDER) as valori GROUP BY p.IDPROFILE) SELECT IDPROFILE FROM Tabella WHERE num = @numValori AND numOK = @numValori
- Contrassegnato come risposta brggpr sabato 11 febbraio 2017 18:11
-
Wow
grazie. Non so se la puoi rendere più elegante, ma cosi sembra funzionare.
Mi hai anche dato lo spunto per capire come funziona
grazie ancora Luca
GianPiero
- Contrassegnato come risposta brggpr sabato 11 febbraio 2017 18:12
- Contrassegno come risposta annullato Edoardo BenussiMVP, Moderator lunedì 13 febbraio 2017 11:57