Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

Pivot Table With Multiple Column Aggregates

CREATE TABLE #DoublePivot
(      [ID] INT IDENTITY(1,1) NOT NULL,
       [UserID] INT NOT NULL,
       [SomeType] INT NOT NULL,
       [NumberA] INT NOT NULL,
       [NumberB] INT NOT NULL,
       [Created] DATETIME NOT NULL DEFAULT(getdate())
)

INSERT INTO #DoublePivot
       (      UserID, SomeType, NumberA, NumberB )
       VALUES
       (      1, 1, 20, 10 ),
       (      1, 2, 50, 20 ),
       (      1, 1, 10, 0),
       (      2, 1, 10, 10),
       (      2, 2, 10, 40),
       (      1, 1, 20, 20),
       (      2, 2, 20, 70);

SELECT * FROM #DoublePivot order by UserID, SomeType

SELECT UserID, SomeType, SUM(NumberA) as SumNumberA, SUM(NumberB) as SumNumberB FROM #DoublePivot Group by UserID, SomeType order by UserID, SomeType
                                 
       SELECT UserID,
                     MAX([1]) AS SomeType1_NumberA,
                     MAX([-1]) AS SomeType1_NumberB,
                     MAX([2]) AS SomeType1_NumberB ,
                     MAX([-2]) AS SomeType2_NumberB
       FROM
                     (      SELECT UserID,
                                         SomeType,
                                         (-* SomeType) as SomeTypeB,
                                         SUM(NumberA) AS NumberA,
                                         SUM(NumberB) AS NumberB
                           FROM #DoublePivot
                           GROUP BY UserID, SomeType
                     )  BaseTable
                     PIVOT
                     (      SUM(NumberA)
                           FOR SomeType IN ([1], [2])
                     ) AS PivotA
                     PIVOT
                     (      SUM(NumberB)
                           FOR SomeTypeB IN ([-1], [-2])
                     ) AS PivotB
       GROUP BY UserID

DROP TABLE #DoublePivot

*  (-1 * SomeType) - in order to set a new "base" column to the second pivot summary.



"Automatic" extended events - system_health

After SQL Server installation, A default extended events session - system health – is created.
System health runs without any noticeable performance effects, and collect some important events:
  • Deadlocks
  • Sessions that have waited on locks, waits, etc.
  • More….
See all in:


I use it to catch deadlocks graph, and it was very helpful!

You can also filters events.
If you don’t remember the exact event name, you can type part of it:


After you get the results and see the event you need, you can specify the filter by it: