Sql |
SET NOCOUNT ON;
DECLARE @geo GEOGRAPHY = GEOGRAPHY::Point( (param 1) , (param 2) , 4326);
DECLARE @lat NUMERIC(18,14) = (param 3) ;
DECLARE @lon NUMERIC(18,14) = (param 4) ;
DECLARE @approximateSquare TABLE ( id INT, distanzadacitta FLOAT, tipostruttura VARCHAR(10) );
DECLARE @checkInDate DATE = (param 5) ;
DECLARE @checkOutDate DATE = (param 6) ;
DECLARE @checkOutDateMin DATE = (param 7) ;
DECLARE @todayDate DATE = GETDATE();
DECLARE @offset INT = DATEDIFF(minute, GetDate() AT TIME ZONE 'Central European Standard Time', GetUTCDate());
SET @todayDate = DATEADD(minute, @offset, GetUTCDate());
INSERT
INTO @approximateSquare
( id,
distanzadacitta,
tipostruttura )
SELECT a.id,
distanzadacitta = @geo.STDistance(GEOGRAPHY::Point(a.latitudine, a.longitudine, 4326)) / 1000,
'bbit'
FROM strutture (NOLOCK) a
LEFT JOIN baratto.dbo.strutture b (NOLOCK) ON b.idstruttura = a.id AND b.tipostruttura = 'bbit'
WHERE a.online = 1
AND a.latitudine IS NOT NULL
AND a.longitudine IS NOT NULL
AND a.latitudine BETWEEN @lat - (param 8) * 0.009006169 AND @lat + (param 9) * 0.009006169
AND a.longitudine BETWEEN @lon - (param 10) * 0.011710973 AND @lon + (param 11) * 0.011710973
AND a.istopbnb = 1
;
INSERT
INTO @approximateSquare
( id,
distanzadacitta,
tipostruttura )
SELECT a.id,
distanzadacitta = @geo.STDistance(GEOGRAPHY::Point(a.latitudine, a.longitudine, 4326)) / 1000,
'bbsic'
FROM beb.dbo.strutture (NOLOCK) a
LEFT JOIN baratto.dbo.strutture b (NOLOCK) ON b.idstruttura = a.id AND b.tipostruttura = 'bbit'
WHERE a.online = 1
AND a.latitudine IS NOT NULL
AND a.longitudine IS NOT NULL
AND a.latitudine BETWEEN @lat - (param 12) * 0.009006169 AND @lat + (param 13) * 0.009006169
AND a.longitudine BETWEEN @lon - (param 14) * 0.011710973 AND @lon + (param 15) * 0.011710973
AND a.istopbnb = 1
;
SELECT
a.id
, a.idbb2
, a.tipo
, a.nomebeb as nomebeb
, r.regione as regione
, r.ur_regione as ur_regione
, a.nomebeb as nomebeb2
, a.ur_nomebeb
, a.indirizzo
, a.numerocivico
, a.zona
, a.frazione
, a.citta
, a.provincia
, a.url as sitoweb
, a.email
, a.emailnonfunziona
, a.latitudine
, a.longitudine
, a.rate
, a.rateagit
, a.ratecvit
, a.ratebb1
, a.ip
, a.pmin
, a.pmax
, a.pdmin
, a.pdmax
, a.psmin
, a.psmax
, a.idbooking
, a.tel1
, a.tel2
, a.cell1
, a.cell2
, a.mediarecensioni
, a.mediarecensionitutti
, a.numerorecensionitutti
, a.visualizzarecensioni
, a.forzarecensioni
, a.camere_attivate
, a.prenotazione_diretta
, a.tasso_risposta
, case when datalength(a.descrizione) = 0 or datalength(a.descrizione) is null then 0 else 1 end as haDescrizione
, case when datalength(a.video) = 0 or datalength(a.video) is null then 0 else 1 end as haVideo
, case when a.idregione = 15 then 'bbsic' else 'bbit' end as tipoStruttura
, a.geoPoint.STDistance(@geo)/1000 as distanzadacitta
, a.geoPoint.STDistance(@geo) as distanzadacittametri
, a.preventivi
, a.tutterichieste
, a.prioritysorting
, a.whatsapp
, a.istopbnb
, a.notificheSocialchat
, fs.nomefile as thumb
, r.idregione
, fs.foto1, fs.foto2, fs.foto3, fs.foto4, fs.foto5, fs.foto6, fs.foto7, fs.foto8, fs.foto9
, fs.foto10, fs.foto11, fs.foto12, fs.foto13, fs.foto14, fs.foto15, fs.foto16, fs.foto17, fs.foto18
, fs.foto19, fs.foto20, fs.foto21, fs.foto22, fs.foto23, fs.foto24, fs.foto25, fs.foto26, fs.foto27
, p.AccessoDisabili as accessoDisabili
, p.AnimaliAmmessi as animaliAmmessi
, p.CondizionatoreInCamera as ariaCondizionata
, p.sipuofumare as sipuofumare
, p.parcheggio as parcheggio
, p.casad41 as piscina
, p.casad42 as giardino
, p.casad43 as angoloCottura
, p.casad44 as terrazza
, p.casad52 as lavanderia
, p.lettod42 as tvInCamera
, p.internet as internet
, p.Ristorante as ristorante
, p.Spa as spa
, p.Trekking as trekking
, p.pisteCiclabili as pisteciclabili
, p.BicicletteDisponibili as biciclettedisponibili
, p.Maneggio as maneggio
, p.bonusvacanze
, p.BonusVacanzaRegione
, p.NoteBonusVacanze
, p.cashback
, p.Quad as quad
, p.FattoriaConAnimali as fattoriaconanimali
, p.FattoriaDidattica as fattoriadidattica
, case when (p.temia1 = 3 or a.zona = 'Campagna' or a.zona = 'Collina' or a.tipo = 'AG') then 1 else 0 end as campagna
, p.WifiGratis as wifiGratis
, p.phon as phon
, p.riscaldamento as riscaldamento
, p.temib21 as dimorastorica
, case when (p.temib22 = 1 or p.temib23 = 1) then 1 else 0 end as design
, p.temib25 as famiglie
, p.temib26 as affari
, p.temib27 as fugaromantica
, p.homerestaurant as homerestaurant
, p.sauna as sauna
, p.vascaidromassaggio as vascaidromassaggio
, p.palestragym as palestragym
, p.camino as camino
, p.bambiniesclusi
, p.lettod11 as numeroCamere
, p.lettod12 as bagnoInCamera
, p.lettod13 as bagnoPrivato
, p.lettod14 as bagnoCondiviso
, p.prezzoanimali as prezzoanimali
, p.prezzoanimaligiornaliero as prezzoanimaligiornaliero
, p.requisitoanimalitaglia as requisitoanimalitaglia
, p.requisitoanimalilibretto as requisitoanimalilibretto
, p.requisitoanimaliguinzaglio as requisitoanimaliguinzaglio
, p.requisitoanimalicasa as requisitoanimalicasa
, p.requisitoanimalicollocazione as requisitoanimalicollocazione
, p.confermagestoreanimali as confermagestoreanimali
, p.requisitoanimalisolistruttura as requisitoanimalisolistruttura
, p.requisitoanimaliconpadroni as requisitoanimaliconpadroni
, p.requisitoanimalidivietoletti as requisitoanimalidivietoletti
, p.requisitoanimalidivietospazicomuni as requisitoanimalidivietospazicomuni
, p.requisitoanimalicuccia as requisitoanimalicuccia
, p.requisitoanimaliperiodoanno as requisitoanimaliperiodoanno
, p.requisitoanimaliperiodobreve as requisitoanimaliperiodobreve
, p.requisitoanimalipelocorto as requisitoanimalipelocorto
, p.requisitoanimalisupplemento as requisitoanimalisupplemento
, p.requisitotipoanimali as requisitotipoanimali
, p.dotazioniperanimali as dotazioniperanimali
, p.prezzoanimalicauzione as prezzoanimalicauzione
, p.colazioneinclusa as colazioneInclusa
, case when (a.charmedesign = 1 or (tag_viaggiatori.charme = 1 and tag_viaggiatori.design = 1)) then 1 else 0 end as charmedesign
, case when (so.in_riva_al_mare = 1 or tag_viaggiatori.in_riva_al_mare = 1) then 1 else 0 end as in_riva_al_mare
, a.charmedesign as charmedesign_weight
, so.in_riva_al_mare as in_riva_al_mare_weight
, tag_viaggiatori.in_centro as in_centro_weight
, tag_viaggiatori.panorama_spettacolare
, tag_viaggiatori.colazione_abbondante
, tag_viaggiatori.charme
, tag_viaggiatori.design
, tag_viaggiatori.nuovissimo
, tag_viaggiatori.piscina
, tag_viaggiatori.vicino_piste_sci
, tag_viaggiatori.vicino_aeroporto
, tag_viaggiatori.vicino_stazione
, tag_viaggiatori.economico
, case when (tag_viaggiatori.in_centro = 1 or so.in_centro = 1) then 1 else 0 end as in_centro
, tag_viaggiatori.in_riva_al_lago
, tag_viaggiatori.in_riva_al_fiume
, tag_viaggiatori.vicino_metro
, tag_viaggiatori.vicino_terme
, tag_viaggiatori.in_zona_shopping
, so.penalizzazione_prezzi
, so.identificativo_regionale
, so.mostra_cellulare1
, b.id as idBaratto
FROM strutture (NOLOCK) a
INNER JOIN @approximateSquare approximateSquare ON a.id = approximateSquare.id AND approximateSquare.tipostruttura = 'bbit'
INNER JOIN bebitalia.dbo.regioni (NOLOCK) r ON r.idregione = a.idregione
LEFT JOIN bebitalia.dbo.plus (NOLOCK) p ON a.id = p.idstruttura AND p.tipostruttura = 'bbit'
OUTER APPLY (
SELECT penalizzazione_prezzi, identificativo_regionale, in_riva_al_mare, in_centro, mostra_cellulare1
FROM bebitalia.dbo.strutture_opzioni (NOLOCK)
WHERE idstruttura = a.id AND tipostruttura = 'bbit'
) AS so
OUTER APPLY (
SELECT idstruttura, tipostruttura, [0] as nomefile,
[1] as foto1, [2] as foto2, [3] as foto3, [4] as foto4, [5] as foto5, [6] as foto6, [7] as foto7, [8] as foto8, [9] as foto9,
[10] as foto10, [11] as foto11, [12] as foto12, [13] as foto13, [14] as foto14, [15] as foto15, [16] as foto16, [17] as foto17, [18] as foto18,
[19] as foto19, [20] as foto20, [21] as foto21, [22] as foto22, [23] as foto23, [24] as foto24, [25] as foto25, [26] as foto26, [27] as foto27
FROM (
SELECT f2.idstruttura, f2.tipostruttura, (f2.nomefile + ' (param 16) rfh=' + convert(nvarchar, max(f2.v_foto)) + '|' + convert(nvarchar, max(f2.width)) + '|' + convert(nvarchar, max(f2.height))) as nomefile, CASE WHEN f2.idcategoria = 1 THEN 0 ELSE ROW_NUMBER() OVER (PARTITION BY f2.idstruttura, f2.tipostruttura ORDER BY f2.order_foto) END as n_foto
FROM bebitalia.dbo.fotostrutture f2 (NOLOCK)
WHERE f2.idstruttura = a.id AND f2.tipostruttura = 'bbit' AND (f2.idcategoria = 4 OR f2.idcategoria = 1)
GROUP BY f2.idstruttura, f2.tipostruttura, f2.nomefile, f2.v_foto, f2.order_foto, f2.idcategoria
) as p
PIVOT (
MAX(p.nomefile)
FOR n_foto IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27])
) as pivot_foto
) as fs
OUTER APPLY (
SELECT idstruttura, tipostruttura, [1] as in_riva_al_mare, [4] as panorama_spettacolare, [5] as colazione_abbondante, [6] as charme, [7] as design, [8] as nuovissimo, [9] as piscina, [10] as vicino_piste_sci, [11] as vicino_aeroporto, [12] as vicino_stazione, [13] as economico, [14] as in_centro, [15] as in_riva_al_lago, [16] as in_riva_al_fiume, [17] as vicino_metro, [18] as vicino_terme, [19] as in_zona_shopping
FROM (
SELECT idstruttura, tipostruttura, idtag
FROM iHotels.dbo.tagstrutture (NOLOCK) ts
WHERE ts.idstruttura = a.id AND ts.tipostruttura = 'bbit'
GROUP BY idstruttura, tipostruttura, idtag
HAVING COUNT(idtag) > 1
) as p
PIVOT (
count(idtag)
FOR idtag IN ([1], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19])
) as pivot_tag
) as tag_viaggiatori
WHERE approximateSquare.distanzadacitta < (param 17)
UNION
SELECT
a.id
, a.idbb2
, a.tipo
, a.nomebeb as nomebeb
, r.regione as regione
, r.ur_regione as ur_regione
, a.nomebeb as nomebeb2
, a.ur_nomebeb
, a.indirizzo
, a.numerocivico
, a.zona
, a.frazione
, a.citta
, a.provincia
, a.url as sitoweb
, a.email
, a.emailnonfunziona
, a.latitudine
, a.longitudine
, a.rate
, a.rateagit
, a.ratecvit
, a.ratebb1
, a.ip
, a.pmin
, a.pmax
, a.pdmin
, a.pdmax
, a.psmin
, a.psmax
, a.idbooking
, a.tel1
, a.tel2
, a.cell1
, a.cell2
, a.mediarecensioni
, a.mediarecensionitutti
, a.numerorecensionitutti
, a.visualizzarecensioni
, a.forzarecensioni
, a.camere_attivate
, a.prenotazione_diretta
, a.tasso_risposta
, case when datalength(a.descrizione) = 0 or datalength(a.descrizione) is null then 0 else 1 end as haDescrizione
, case when datalength(a.video) = 0 or datalength(a.video) is null then 0 else 1 end as haVideo
, case when a.idregione = 15 then 'bbsic' else 'bbit' end as tipoStruttura
, a.geoPoint.STDistance(@geo)/1000 as distanzadacitta
, a.geoPoint.STDistance(@geo) as distanzadacittametri
, a.preventivi
, a.tutterichieste
, a.prioritysorting
, a.whatsapp
, a.istopbnb
, a.notificheSocialchat
, fs.nomefile as thumb
, r.idregione
, fs.foto1, fs.foto2, fs.foto3, fs.foto4, fs.foto5, fs.foto6, fs.foto7, fs.foto8, fs.foto9
, fs.foto10, fs.foto11, fs.foto12, fs.foto13, fs.foto14, fs.foto15, fs.foto16, fs.foto17, fs.foto18
, fs.foto19, fs.foto20, fs.foto21, fs.foto22, fs.foto23, fs.foto24, fs.foto25, fs.foto26, fs.foto27
, p.AccessoDisabili as accessoDisabili
, p.AnimaliAmmessi as animaliAmmessi
, p.CondizionatoreInCamera as ariaCondizionata
, p.sipuofumare as sipuofumare
, p.parcheggio as parcheggio
, p.casad41 as piscina
, p.casad42 as giardino
, p.casad43 as angoloCottura
, p.casad44 as terrazza
, p.casad52 as lavanderia
, p.lettod42 as tvInCamera
, p.internet as internet
, p.Ristorante as ristorante
, p.Spa as spa
, p.Trekking as trekking
, p.pisteCiclabili as pisteciclabili
, p.BicicletteDisponibili as biciclettedisponibili
, p.Maneggio as maneggio
, p.bonusvacanze
, p.BonusVacanzaRegione
, p.NoteBonusVacanze
, p.cashback
, p.Quad as quad
, p.FattoriaConAnimali as fattoriaconanimali
, p.FattoriaDidattica as fattoriadidattica
, case when (p.temia1 = 3 or a.zona = 'Campagna' or a.zona = 'Collina' or a.tipo = 'AG') then 1 else 0 end as campagna
, p.WifiGratis as wifiGratis
, p.phon as phon
, p.riscaldamento as riscaldamento
, p.temib21 as dimorastorica
, case when (p.temib22 = 1 or p.temib23 = 1) then 1 else 0 end as design
, p.temib25 as famiglie
, p.temib26 as affari
, p.temib27 as fugaromantica
, p.homerestaurant as homerestaurant
, p.sauna as sauna
, p.vascaidromassaggio as vascaidromassaggio
, p.palestragym as palestragym
, p.camino as camino
, p.bambiniesclusi
, p.lettod11 as numeroCamere
, p.lettod12 as bagnoInCamera
, p.lettod13 as bagnoPrivato
, p.lettod14 as bagnoCondiviso
, p.prezzoanimali as prezzoanimali
, p.prezzoanimaligiornaliero as prezzoanimaligiornaliero
, p.requisitoanimalitaglia as requisitoanimalitaglia
, p.requisitoanimalilibretto as requisitoanimalilibretto
, p.requisitoanimaliguinzaglio as requisitoanimaliguinzaglio
, p.requisitoanimalicasa as requisitoanimalicasa
, p.requisitoanimalicollocazione as requisitoanimalicollocazione
, p.confermagestoreanimali as confermagestoreanimali
, p.requisitoanimalisolistruttura as requisitoanimalisolistruttura
, p.requisitoanimaliconpadroni as requisitoanimaliconpadroni
, p.requisitoanimalidivietoletti as requisitoanimalidivietoletti
, p.requisitoanimalidivietospazicomuni as requisitoanimalidivietospazicomuni
, p.requisitoanimalicuccia as requisitoanimalicuccia
, p.requisitoanimaliperiodoanno as requisitoanimaliperiodoanno
, p.requisitoanimaliperiodobreve as requisitoanimaliperiodobreve
, p.requisitoanimalipelocorto as requisitoanimalipelocorto
, p.requisitoanimalisupplemento as requisitoanimalisupplemento
, p.requisitotipoanimali as requisitotipoanimali
, p.dotazioniperanimali as dotazioniperanimali
, p.prezzoanimalicauzione as prezzoanimalicauzione
, p.colazioneinclusa as colazioneInclusa
, case when (a.charmedesign = 1 or (tag_viaggiatori.charme = 1 and tag_viaggiatori.design = 1)) then 1 else 0 end as charmedesign
, case when (so.in_riva_al_mare = 1 or tag_viaggiatori.in_riva_al_mare = 1) then 1 else 0 end as in_riva_al_mare
, a.charmedesign as charmedesign_weight
, so.in_riva_al_mare as in_riva_al_mare_weight
, tag_viaggiatori.in_centro as in_centro_weight
, tag_viaggiatori.panorama_spettacolare
, tag_viaggiatori.colazione_abbondante
, tag_viaggiatori.charme
, tag_viaggiatori.design
, tag_viaggiatori.nuovissimo
, tag_viaggiatori.piscina
, tag_viaggiatori.vicino_piste_sci
, tag_viaggiatori.vicino_aeroporto
, tag_viaggiatori.vicino_stazione
, tag_viaggiatori.economico
, case when (tag_viaggiatori.in_centro = 1 or so.in_centro = 1) then 1 else 0 end as in_centro
, tag_viaggiatori.in_riva_al_lago
, tag_viaggiatori.in_riva_al_fiume
, tag_viaggiatori.vicino_metro
, tag_viaggiatori.vicino_terme
, tag_viaggiatori.in_zona_shopping
, so.penalizzazione_prezzi
, so.identificativo_regionale
, so.mostra_cellulare1
, b.id as idBaratto
FROM beb.dbo.strutture (NOLOCK) a
INNER JOIN @approximateSquare approximateSquare ON a.id = approximateSquare.id AND approximateSquare.tipostruttura = 'bbsic'
INNER JOIN bebitalia.dbo.regioni (NOLOCK) r ON r.idregione = a.idregione
LEFT JOIN bebitalia.dbo.plus (NOLOCK) p ON a.id = p.idstruttura AND p.tipostruttura = 'bbsic'
OUTER APPLY (
SELECT penalizzazione_prezzi, identificativo_regionale, in_riva_al_mare, in_centro, mostra_cellulare1
FROM bebitalia.dbo.strutture_opzioni (NOLOCK)
WHERE idstruttura = a.id AND tipostruttura = 'bbsic'
) AS so
OUTER APPLY (
SELECT idstruttura, tipostruttura, [0] as nomefile,
[1] as foto1, [2] as foto2, [3] as foto3, [4] as foto4, [5] as foto5, [6] as foto6, [7] as foto7, [8] as foto8, [9] as foto9,
[10] as foto10, [11] as foto11, [12] as foto12, [13] as foto13, [14] as foto14, [15] as foto15, [16] as foto16, [17] as foto17, [18] as foto18,
[19] as foto19, [20] as foto20, [21] as foto21, [22] as foto22, [23] as foto23, [24] as foto24, [25] as foto25, [26] as foto26, [27] as foto27
FROM (
SELECT f2.idstruttura, f2.tipostruttura, (f2.nomefile + ' (param 18) rfh=' + convert(nvarchar, max(f2.v_foto)) + '|' + convert(nvarchar, max(f2.width)) + '|' + convert(nvarchar, max(f2.height))) as nomefile, CASE WHEN f2.idcategoria = 1 THEN 0 ELSE ROW_NUMBER() OVER (PARTITION BY f2.idstruttura, f2.tipostruttura ORDER BY f2.order_foto) END as n_foto
FROM bebitalia.dbo.fotostrutture f2 (NOLOCK)
WHERE f2.idstruttura = a.id AND f2.tipostruttura = 'bbsic' AND (f2.idcategoria = 4 OR f2.idcategoria = 1)
GROUP BY f2.idstruttura, f2.tipostruttura, f2.nomefile, f2.v_foto, f2.order_foto, f2.idcategoria
) as p
PIVOT (
MAX(p.nomefile)
FOR n_foto IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27])
) as pivot_foto
) as fs
OUTER APPLY (
SELECT idstruttura, tipostruttura, [1] as in_riva_al_mare, [4] as panorama_spettacolare, [5] as colazione_abbondante, [6] as charme, [7] as design, [8] as nuovissimo, [9] as piscina, [10] as vicino_piste_sci, [11] as vicino_aeroporto, [12] as vicino_stazione, [13] as economico, [14] as in_centro, [15] as in_riva_al_lago, [16] as in_riva_al_fiume, [17] as vicino_metro, [18] as vicino_terme, [19] as in_zona_shopping
FROM (
SELECT idstruttura, tipostruttura, idtag
FROM iHotels.dbo.tagstrutture (NOLOCK) ts
WHERE ts.idstruttura = a.id AND ts.tipostruttura = 'bbsic'
GROUP BY idstruttura, tipostruttura, idtag
HAVING COUNT(idtag) > 1
) as p
PIVOT (
count(idtag)
FOR idtag IN ([1], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19])
) as pivot_tag
) as tag_viaggiatori
WHERE approximateSquare.distanzadacitta < (param 19) ;
SET NOCOUNT OFF;
|