Ich habe eine gespeicherte Prozedur in SQL Server 2008 R2 erstellt. Es führt eine Pivot-Tabelle aus. Also, was ich für die nächsten Schritte brauche, sind 3 neue Spalten, die in dieser deklarierten Abfragevariablen erstellt werden würden. In diesen 3 Spalten muss ich eine Berechnung durchführen.Erstellen Sie neue Spalten in einer deklarierten Abfragevariable in SQL Server
Zunächst meine gespeicherten Prozeduren Code: UPDATE Stored Procedure:
BEGIN
SET NOCOUNT ON;
DECLARE @colNo nvarchar(max)
DECLARE @colSum nvarchar(max)
DECLARE @query nvarchar(max)
SET NOCOUNT ON;
WITH vals AS (
SELECT DISTINCT ds.No
FROM QRTestView ds
)
SELECT @colNo = COALESCE(@colNo + ', ', '') + QUOTENAME(No)
@colSum = COALESCE(@colSum + '+ ', '') + QUOTENAME(No)
FROM vals
ORDER BY No
SET @query = 'SELECT *, [Bonus] + 125 as [Fee],
([Bonus] + 125) * [ALL] as [Fee2]
FROM (
SELECT *,
CASE WHEN 70-(100 - Quote) * 10 > -80 THEN 70-(100 - Quote) * 10 ELSE -70 END as [Bonus]
FROM (
SELECT *, '[email protected]+' as [ALL]
FROM (
SELECT
CAST(ISIN as CHAR(12)) As No,
CAST(Quote as CHAR(7)) As Quote,
CAST(Quote as CHAR(7)) As Q
FROM QRTestView
WHERE Datum >= @from_val and Datum <= @to_val
) AS sel
PIVOT (
COUNT(Q)
FOR No IN ('+ @colNo +')
) AS p
UNION ALL
SELECT ''ALL'', *, '[email protected]+'[ALL]
FROM (
SELECT
CAST(No as CHAR(12)) As No,
COUNT(CAST(Quote as CHAR(7))) As Quote
FROM QRTestView
WHERE Datum >= @from_val and Datum <= @to_val
GROUP BY CAST(No as CHAR(12))
) AS sel
PIVOT (
MAX(Quote)
FOR No in ('+ @colNo +')
) AS p
) AS sel2
) as ff
ORDER BY CASE WHEN Quote = ''ALL'' THEN 101 ELSE CAST(Quote as INT) END DESC'
EXEC sp_executesql @query, N'@from_val datetime, @to_val datetime', @from_val = @from, @to_val = @to
END
die Frage zu verstehen, werde ich Ihnen die Quelltabelle zeigen:
| No | Quote | Datum
| DE10101 | 100 | 2016-01-01
| DE10121 | 100 | 2016-01-02
| DE10101 | 100 | 2016-01-05
| DE22034 | 98 | 2016-01-05
| DE10101 | 98 | 2016-01-10
| DE10121 | 80 | 2016-01-10
| DE22034 | 98 | 2016-01-10
| DE22034 | 80 | 2016-01-11
| DE10101 | 100 | 2016-01-20
| DE10121 | 80 | 2016-01-21
Und die Zieltabelle hat 3 zusätzliche Spalten:
| Quote | DE10101 | DE10121 | DE22034 | ALL | Bonus | Fee | Fee2 |
| 100 | 3 | 1 | 0 | 4 | 70 | 195 | 780 |
| 98 | 1 | 0 | 2 | 3 | 50 | 175 | 525 |
| 80 | 0 | 2 | 1 | 3 | -70 | 55 | 165 |
| ALL | 4 | 3 | 3 | 10 | | | 1470 |
die 3 neuen Spalten sind: Bonus, Fee, Fee2
Die Berechnung wie folgt funktioniert:
Bonus: WHEN 70-(100 - Quote) * 10 > -80 THEN 70-(100 - Quote) * 10 ELSE -70
Fee: Bonus + 125
Gebühr 2: ALL * Fee
Wie kann ich diese 3 Spalten und Berechnung definieren in meiner Abfragevariable in der gespeicherten Prozedur?
Sehr schön zu bedienen! Ist es möglich, die Berechnung als deklarierte Variable etwas kürzer zu definieren? – yuro
Ja, Sie können. Aber mit einer weiteren Unterabfrage. Siehe Änderungen. – gofr1
in meinem letzten Thread, könnte ich das mit 'UNION ALL' tun? Ich meine diesen Thread -> [Link] (http://stackoverflow.com/questions/38607931/how-to-define-a-new-column-in-a-stored-procedure-query) – yuro