fix: use cedlab_Chart_UL2 (new SP, don't modify UL1); add correct SQL scripts with Prices table
This commit is contained in:
102
docs/sql/cedlab_Chart_UL2.sql
Normal file
102
docs/sql/cedlab_Chart_UL2.sql
Normal file
@@ -0,0 +1,102 @@
|
||||
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
|
||||
Reference in New Issue
Block a user