Sunteți pe pagina 1din 5

/*WINDOWING*/

SELECT custid, orderid,


val,
SUM(val) OVER(PARTITION BY custid) AS custtotal,
SUM(val) OVER() AS grandtotal
FROM Sales.OrderValues;
SELECT custid, orderid,
val,
CAST(100.0 * val / SUM(val) OVER(PARTITION BY custid) AS NUMERIC(5, 2)) AS pctcu
st,
CAST(100.0 * val / SUM(val) OVER() AS NUMERIC(5, 2)) AS pcttotal
FROM Sales.OrderValues;
SELECT custid, orderid, orderdate, val,
SUM(val) OVER(PARTITION BY custid
ORDER BY orderdate, orderid
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) AS runningtotal
FROM Sales.OrderValues;
WITH data (t, a) AS (
VALUES(1, 1),
(2, 5),
(3, 3),
(4, 5),
(5, 4),
(6, 11)
)
SELECT t, a, avg(a) OVER (ORDER BY t ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
FROM data
ORDER BY
/*WINDOW RANKING*/
SELECT custid, orderid, val,
ROW_NUMBER() OVER(ORDER BY val) AS rownum,
RANK() OVER(ORDER BY val) AS rnk,
DENSE_RANK() OVER(ORDER BY val) AS densernk,
NTILE(100) OVER(ORDER BY val) AS ntile100
FROM Sales.OrderValues;
/*WINDOWS OFFSET*/
SELECT custid, orderid, orderdate, val,
LAG(val) OVER(PARTITION BY custid
ORDER BY orderdate, orderid) AS prev_val,
LEAD(val) OVER(PARTITION BY custid
ORDER BY orderdate, orderid) AS next_val
FROM Sales.OrderValues;
SELECT TOP 1000
[Coil_ID]
,[Start_Date]
,[Stop_Date]
,LAG([Stop_Date]) OVER( order by [Stop_Date] desc) as prevval
,LAG([Coil_ID]) OVER(order by [Stop_Date] desc) as PrevCoilID

, timediff=
CASE
when [Coil_ID]=LAG([Coil_ID]) OVER(order by [Stop_Date] desc) then nu
ll
else DATEDIFF(SECOND,[Stop_Date],LAG([Stop_Date]) OVER( order by [Stop_Da
te] desc))
END
FROM [VPDB].[dbo].[DANSL.PDO_Prod]
order by [Stop_Date] desc

PROCEDURES
/* Stored Procedure*/
/*Using Only Declare*/
USE TSQL2012;
GO
DECLARE @custid AS INT,
@orderdatefrom AS DATETIME,
@orderdateto AS DATETIME;
SET @custid = 37;
SET @orderdatefrom = '2007-04-01';
SET @orderdateto = '2007-07-01';
SELECT orderid, custid, shipperid, orderdate, requireddate, shippeddate
FROM Sales.Orders
WHERE custid = @custid
AND orderdate >= @orderdatefrom
AND orderdate < @orderdateto;
GO
/* Creating Procedures*/
IF OBJECT_ID('Sales.GetCustomerOrders', 'P') IS NOT NULL
DROP PROC Sales.GetCustomerOrders;
GO
CREATE PROC Sales.GetCustomerOrders
@custid AS INT,
@orderdatefrom AS DATETIME = '19000101',
@orderdateto AS DATETIME = '99991231',
@numrows AS INT = 0 OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT orderid, custid, shipperid, orderdate, requireddate, shippeddate
FROM Sales.Orders
WHERE custid = @custid
AND orderdate >= @orderdatefrom
AND orderdate < @orderdateto;
SET @numrows = @@ROWCOUNT;
RETURN;
END
GO
/*Calling Procedures*/

DECLARE @rowsreturned AS INT;


EXEC Sales.GetCustomerOrders
@custid = 37,
@orderdatefrom = '20070401',
@orderdateto = '20070701',
@numrows = @rowsreturned OUTPUT;
SELECT @rowsreturned AS "Rows Returned";
GO
/* Returning Resultset From Stored Procedures */
IF OBJECT_ID('Sales.ListSampleResultsSets', 'P') IS NOT NULL
DROP PROC Sales.ListSampleResultsSets;
GO
CREATE PROC Sales.ListSampleResultsSets
AS
BEGIN
SELECT TOP (1) productid, productname, supplierid,
categoryid, unitprice, discontinued
FROM Production.Products;
SELECT TOP (1) orderid, productid, unitprice, qty, discount
FROM Sales.OrderDetails;
END
GO
EXEC Sales.ListSampleResultsSets
/* Functions */
/* Scalar UDF*/
IF OBJECT_ID('Sales.fn_extension', 'FN') IS NOT NULL
DROP FUNCTION Sales.fn_extension
GO
CREATE FUNCTION Sales.fn_extension
(
@unitprice AS MONEY,
@qty AS INT
)
RETURNS MONEY
AS
BEGIN
RETURN @unitprice * @qty
END;
GO
/*Calling Scalar UDF*/
SELECT Orderid, unitprice, qty, Sales.fn_extension(unitprice, qty) AS extension
FROM Sales.OrderDetails;
SELECT Orderid, unitprice, qty, Sales.fn_extension(unitprice, qty) AS extension
FROM Sales.OrderDetails
WHERE Sales.fn_extension(unitprice, qty) > 1000;
/* Inline TVF */
IF OBJECT_ID('Sales.fn_FilteredExtension', 'IF') IS NOT NULL
DROP FUNCTION Sales.fn_FilteredExtension;
GO
CREATE FUNCTION Sales.fn_FilteredExtension
(

@lowqty AS SMALLINT,
@highqty AS SMALLINT
)
RETURNS TABLE AS RETURN
(
SELECT orderid, unitprice, qty
FROM Sales.OrderDetails
WHERE qty BETWEEN @lowqty AND @highqty
);
GO
/* Calling Inline TVF*/
SELECT orderid, unitprice, qty
FROM Sales.fn_FilteredExtension (10,20);
/* Multi Statement TVF */
IF OBJECT_ID('Sales.fn_FilteredExtension2', 'TF') IS NOT NULL
DROP FUNCTION Sales.fn_FilteredExtension2;
GO
CREATE FUNCTION Sales.fn_FilteredExtension2
(
@lowqty AS SMALLINT,
@highqty AS SMALLINT
)
RETURNS @returntable TABLE
(
orderid INT,
unitprice MONEY,
qty SMALLINT
)
AS
BEGIN
INSERT @returntable
SELECT orderid, unitprice, qty
FROM Sales.OrderDetails
WHERE qty BETWEEN @lowqty AND @highqty
RETURN
END;
GO
/* Calling M-TVF */
SELECT orderid, unitprice, qty
FROM Sales.fn_FilteredExtension2 (10,20);

CROSS APPLY
select Prod.* ,TrendAvg.*, mintable.* from [VPDB].[dbo].[DANSL.PDO_Prod] as Prod
CROSS APPLY (
select AVG([RECOILER_SPEED]) as [RECOILER_SPEED] ,AVG([COIL_LENGTH]) as
[COIL_LENGTH] ,avg ([COIL_THICKNESS]) as [COIL_THICKNESS],avg ([LINE_SPEED]) as

[LINE_SPEED] ,avg ([RECOILER_DIAMETER]) as [RECOILER_DIAMETER],avg ([RECOILER_MO


TOR_CURRENT]) as [RECOILER_MOTOR_CURRENT] ,avg ([RECOILER_TENSION]) as [RECOILER
_TENSION] ,avg ([SCRAP_BALLER_MOTOR_CURRENT]) as [SCRAP_BALLER_MOTOR_CURRENT],av
g ([UNCOILER_DIAMETER]) as [UNCOILER_DIAMETER],avg ([UNCOILER_MOTOR_CURRENT]) as
[UNCOILER_MOTOR_CURRENT],avg ([UNCOILER_SPEED]) as [UNCOILER_SPEED],avg ([UNCOI
LER_TENSION]) as [UNCOILER_TENSION] from
(select distinct [TagName],[TagValueFloat],[TransTime] from [VPD
B].[dbo].[DANSL.Trend]
where [TransTime] between Prod.Start_Date and Prod.Stop
_Date
-- CONVERT(DATE,[TransTime]) between '2016-06-06' and '
2016-06-06'
--and [TagName] IN ('RECOILER_SPEED','COIL_LENGTH') /*o
rder by [TransTime]*/
) as MyTable
PIVOT (AVG([TagValueFloat]) for [TagName] IN([RECOILER_SPEED],[C
OIL_LENGTH],[COIL_THICKNESS],[LINE_SPEED],[RECOILER_DIAMETER],[RECOILER_MOTOR_CU
RRENT],[RECOILER_TENSION],[SCRAP_BALLER_MOTOR_CURRENT],[UNCOILER_DIAMETER],[UNCO
ILER_MOTOR_CURRENT],[UNCOILER_SPEED],[UNCOILER_TENSION])) as MyPivotTable
where [TransTime] between Prod.Start_Date and Prod.Stop_Date
) as TrendAvg
CROSS APPLY (
select MIN([RECOILER_SPEED]) as [RECOILER_SPEED] ,MIN([COIL_LENGTH]) as
[COIL_LENGTH] ,MIN ([COIL_THICKNESS]) as [COIL_THICKNESS],MIN ([LINE_SPEED]) as
[LINE_SPEED] ,MIN ([RECOILER_DIAMETER]) as [RECOILER_DIAMETER],MIN ([RECOILER_MO
TOR_CURRENT]) as [RECOILER_MOTOR_CURRENT] ,MIN ([RECOILER_TENSION]) as [RECOILER
_TENSION] ,MIN ([SCRAP_BALLER_MOTOR_CURRENT]) as [SCRAP_BALLER_MOTOR_CURRENT],MI
N ([UNCOILER_DIAMETER]) as [UNCOILER_DIAMETER],MIN ([UNCOILER_MOTOR_CURRENT]) as
[UNCOILER_MOTOR_CURRENT],MIN ([UNCOILER_SPEED]) as [UNCOILER_SPEED],MIN ([UNCOI
LER_TENSION]) as [UNCOILER_TENSION] from
(select distinct [TagName],[TagValueFloat],[TransTime] from [VPD
B].[dbo].[DANSL.Trend]
where [TransTime] between Prod.Start_Date and Prod.Stop
_Date
--between '2016-06-06' and '2016-06-06'
--and [TagName] IN ('RECOILER_SPEED','COIL_LENGTH') /*o
rder by [TransTime]*/
) as MyTable
PIVOT (MIN([TagValueFloat]) for [TagName] IN([RECOILER_SPEED],[C
OIL_LENGTH],[COIL_THICKNESS],[LINE_SPEED],[RECOILER_DIAMETER],[RECOILER_MOTOR_CU
RRENT],[RECOILER_TENSION],[SCRAP_BALLER_MOTOR_CURRENT],[UNCOILER_DIAMETER],[UNCO
ILER_MOTOR_CURRENT],[UNCOILER_SPEED],[UNCOILER_TENSION])) as MyPivotTable
where [TransTime] between Prod.Start_Date and Prod.Stop_Date
) as mintable
--where [MSG_Counter]=15784
--where Coil_ID = 'H16FSCL0528017#1'
where [Stop_Date] between '2016-05-06' and '2016-06-06'
order by [MSG_Counter];

S-ar putea să vă placă și