J'utilise MS SQL Server 2014 sur Windows 7.
Dans la database, j'ai une table nommée Orders
, qui ressemble à ceci:
OrderID | CustomerID | OrderDate | ... ---------------------------------------- 1028 90 2015-10-10 ... 2416 68 2016-02-12
J'avais besoin de deux choses:
Je suis un débutant en SQL, mais j'ai réussi à écrire 2 instructions SQL dans mon application qui semblent faire le travail:
Pour l'exigence # 1
SELECT COUNT(DISTINCT CustomerID) FROM Orders; // result = 74
Pour l'exigence 2:
SELECT COUNT(DISTINCT CustomerID) FROM Orders WHERE OrderDate >= '2016-01-01'; // result = 34
Je voudrais savoir s'il est possible de merge / combiner d'une manière ou d'une autre les deux instructions SQL ci-dessus en une seule requête …? Bien sûr, j'ai besoin des deux résultats: le total des clients (74 dans le cas ci-dessus) et aussi les clients de cette année (soit 34).
La database est une database distante, donc toute idée d'accélérer les performances de la requête est la bienvenue.
Utiliser l'agrégation conditionnelle:
SELECT COUNT(DISTINCT CustomerID) as Total, COUNT(DISTINCT CASE WHEN OrderDate >= '2016-01-01' THEN CustomerID END) as Total_2016 FROM Orders;
Vous pouvez combiner datatables horizontalement comme dans la réponse précédente ou vous pouvez les combiner verticalement en utilisant UNION, comme ceci, si vous pensez avoir besoin d'une forme tabulaire:
SELECT 'Total Customers' As Description, COUNT(DISTINCT CustomerID) As Number FROM Orders // total = 74 Union ALL SELECT '2016 Customers' AS Description, COUNT(DISTINCT CustomerID) As Number FROM Orders WHERE OrderDate >= '2016-01-01'; // this_year = 34