DECLARE @cKod VARCHAR(15) = '21-5g00 ', @i TINYINT = 1 SET @i = 1 SET @cKod = TRIM(@cKod) --LTRIM(RTRIM(@cKod)) IF LEN(@cKod) <> 6 SELECT 'Kod niepoprawny' ELSE BEGIN WHILE @i<=6 BEGIN IF (SUBSTRING(@cKod,@i,1) in ('0','1','2','3','4','5','6','7','8','9') and @i <> 3) OR (@i = 3 and SUBSTRING(@cKod, @i, 1) = '-') set @i = @i+1 ELSE BEGIN SELECT 'Kod niepoprawny' BREAK END END IF(@i = 7) SELECT 'Kod poprawny' END DECLARE @nip VARCHAR(100) = '676-223-95-58' SELECT @nip = REPLACE(@nip,'-','') IF ISNUMERIC(@nip) = 0 SELECT 'Nip niepoprawny' DECLARE @weights AS TABLE ( Position TINYINT IDENTITY(1,1) NOT NULL, Weight TINYINT NOT NULL ) INSERT INTO @weights VALUES (6), (5), (7), (2), (3), (4), (5), (6), (7) IF SUBSTRING(@nip, 10, 1) = (SELECT SUM(CONVERT(TINYINT, SUBSTRING(@nip, Position, 1)) * Weight) % 11 FROM @weights) SELECT 'Nip poprawny' ELSE SELECT 'Nip niepoprawny' /* dynamiczny sql */ DECLARE @dbname VARCHAR(50)= 'TSQL2012', @tablename VARCHAR(50)= 'HR.Employees' EXECUTE ('USE ' + @dbname + ' SELECT * FROM ' + @tablename) SET @dbname = 'nowedemo1' SET @tablename = 'NGastroLog' EXECUTE ('USE ' + @dbname + ' SELECT * FROM ' + @tablename) SELECT * FROM SYSOBJECTS WHERE xtype = 'U' SET @dbname = 'TSQL2012' DECLARE @tables AS TABLE ( tablename VARCHAR(50), performed BIT DEFAULT 0 ) -- wszystkie tabele użytkownika z bazy INSERT INTO @tables(tablename) SELECT CONCAT(TABLE_SCHEMA,'.',TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_Type = 'BASE TABLE' --SELECT name FROM SYSOBJECTS WHERE xtype = 'U'; --SELECT TABLE_SCHEMA,TABLE_NAME, * FROM INFORMATION_SCHEMA.TABLES WHILE EXISTS(SELECT * FROM @tables WHERE performed = 0) BEGIN SELECT TOP 1 @tablename = tablename FROM @tables WHERE performed = 0 SELECT CONCAT('Liczba rekordów w tabeli ', @tablename, ': ') EXECUTE ('USE ' + @dbname + ' SELECT COUNT(*) FROM ' + @tablename) UPDATE @tables SET performed = 1 WHERE tablename = @tablename END select * FROM Sales.Orders o select count(*) FROM Sales.Orders o SELECT o.orderid, count(*), sum(od.unitprice), sum(od.qty), sum(od.unitprice * od.qty)/**(1 - od.discount)*/ AS Suma, CASE WHEN sum(od.unitprice * od.qty) > 2000 THEN 'Zam. > 2000' WHEN sum(od.unitprice * od.qty) > 1000 THEN 'Zam. > 1000' ELSE 'Zam. <= 1000' END AS Opis FROM Sales.Orders o INNER JOIN Sales.OrderDetails od ON od.orderid = o.orderid GROUP BY o.orderid order by 2 desc IF OBJECT_ID('tempdb..#OrdersTab') IS NOT NULL DROP TABLE #OrdersTab CREATE TABLE #OrdersTab ( orderid INT, totalvalue DECIMAL(19,2), positioncount INT ); INSERT INTO #OrdersTab SELECT o.orderid, sum(od.unitprice * od.qty), count(*) FROM Sales.Orders o INNER JOIN Sales.OrderDetails od ON od.orderid = o.orderid GROUP BY o.orderid order by 2 desc select * from #OrdersTab select sum(totalvalue), sum(positioncount), avg(totalvalue), avg(positioncount) from #OrdersTab --zadanie: --1) Dla wszystkich zamówień > 2000 wypisać informacje o produktach zamówionych o wartości powyżej 500 -- w postaci id zamówienia, data zamówienia, produkt, ilość (qty), wartość (qty * unitprice) --2) Dla każdego z menedżerów ustalić ilu każdy ma bezpośrednich i wszystkich podwładnych --3) Zrobić totalizer zamówień utworzyć tabelę ordertotalizer z danymi orderid, totalvalue, positioncount -- 4) Znaleźć ostatni numer zamówienia dla którego suma wartości zamówień < 1000000 -- 5) Utworzyc widok zawierający dla każdego z dostawców 5 produktów zamówionych w największej ilości