103 lines
3.7 KiB
Transact-SQL
103 lines
3.7 KiB
Transact-SQL
USE [FirstSolutionDB]
|
|
GO
|
|
|
|
-- ============================================================
|
|
-- SP: cedlab_Chart_UL2
|
|
-- Metadata dei sottostanti per il grafico V2.
|
|
-- NON modifica cedlab_Chart_UL1 (esistente, usata altrove).
|
|
--
|
|
-- Restituisce (ordinato IsWorstOf DESC, worst-of nella prima riga):
|
|
-- IDCertificates, IDUnderlyings, StartDate, Strike,
|
|
-- BarrieraCouponPerc, BarrieraCoupon,
|
|
-- BarrieraCapitalePerc, BarrieraCapitale,
|
|
-- Sottostante, IsWorstOf,
|
|
-- PriceWorst, PriceWorstPerc,
|
|
-- NumPrezziCFT, NomeCFT,
|
|
-- TriggerAutocallPerc, AutocallValue
|
|
--
|
|
-- Colonne con <<< verify: adatta al tuo schema reale.
|
|
-- ============================================================
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[cedlab_Chart_UL2]
|
|
@isin NVARCHAR(12)
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
-- Recupera IDCertificates
|
|
DECLARE @IDCertificates INT;
|
|
|
|
SELECT TOP 1
|
|
@IDCertificates = c.IDCertificates -- <<< verify: colonna ID nel tuo Certificates
|
|
FROM [dbo].[Certificates] c -- <<< verify: nome tabella certificati
|
|
WHERE c.ISIN = @isin;
|
|
|
|
IF @IDCertificates IS NULL RETURN;
|
|
|
|
-- Conta prezzi EOD disponibili del certificato (usato per il sub-titolo "< 30 gg")
|
|
DECLARE @NumPrezziCFT INT;
|
|
SELECT @NumPrezziCFT = COUNT(*)
|
|
FROM dbo.Prices
|
|
WHERE CertificatesID = @IDCertificates
|
|
AND PX_LAST_EOD IS NOT NULL
|
|
AND PX_LAST_EOD <> 0;
|
|
|
|
SELECT
|
|
u.IDCertificates,
|
|
u.IDUnderlyings,
|
|
u.StartDate, -- <<< verify: colonna StartDate in Underlyings
|
|
u.Strike, -- <<< verify: colonna Strike in Underlyings
|
|
|
|
-- Barriere (% e assolute)
|
|
u.BarrieraCouponPerc, -- <<< verify: colonna % barriera coupon
|
|
u.BarrieraCoupon, -- <<< verify: colonna assoluta barriera coupon
|
|
u.BarrieraCapitalePerc, -- <<< verify: colonna % barriera capitale
|
|
u.BarrieraCapitale, -- <<< verify: colonna assoluta barriera capitale
|
|
|
|
u.Name AS Sottostante, -- <<< verify: colonna nome sottostante
|
|
|
|
u.IsWorstOf, -- <<< verify: colonna 1/0 worst-of in Underlyings
|
|
|
|
-- PriceWorst: ultimo Px_close per il worst-of (0 per gli altri)
|
|
CASE
|
|
WHEN u.IsWorstOf = 1 THEN ISNULL(lp.Px_close, 0)
|
|
ELSE 0
|
|
END AS PriceWorst,
|
|
|
|
-- PriceWorstPerc: PriceWorst / Strike * 100
|
|
CASE
|
|
WHEN u.IsWorstOf = 1 AND ISNULL(u.Strike, 0) > 0
|
|
THEN ISNULL(lp.Px_close, 0) / u.Strike * 100
|
|
ELSE 0
|
|
END AS PriceWorstPerc,
|
|
|
|
@NumPrezziCFT AS NumPrezziCFT,
|
|
|
|
-- NomeCFT: Descrizione + ' - ' + ISIN (adatta nomi colonne)
|
|
c.Descrizione + ' - ' + c.ISIN AS NomeCFT, -- <<< verify: colonne Descrizione e ISIN
|
|
|
|
ISNULL(u.TriggerAutocallPerc, 0) AS TriggerAutocallPerc, -- <<< verify
|
|
ISNULL(u.AutocallValue, 0) AS AutocallValue -- <<< verify
|
|
|
|
FROM dbo.Underlyings u
|
|
JOIN [dbo].[Certificates] c -- <<< verify
|
|
ON c.IDCertificates = u.IDCertificates
|
|
-- Ultimo prezzo disponibile per ogni sottostante (per PriceWorst)
|
|
LEFT JOIN (
|
|
SELECT
|
|
UnderlyingsID,
|
|
Px_close,
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY UnderlyingsID
|
|
ORDER BY Px_date DESC
|
|
) AS rn
|
|
FROM dbo.Prices
|
|
WHERE Px_close IS NOT NULL
|
|
) lp ON lp.UnderlyingsID = u.IDUnderlyings AND lp.rn = 1
|
|
|
|
WHERE u.IDCertificates = @IDCertificates
|
|
ORDER BY u.IsWorstOf DESC; -- worst-of nella prima riga
|
|
|
|
END
|
|
GO
|