J'ai une table composée de 4 colonnes - (ID INT, Localisation Varchar (max), [Date] DateTime, Total_sales Money), composé de 20 enregistrements de sortie, je souhaite 11 lignes dans lesquelles 10 lignes sont les 10 premières lignes. et la 11ème rangée doit être la somme des rangées restantes, c'est-à-dire de 11 à 20 dans une autre. Aidez-moi s'il vous plaît à obtenir la requête. P>
Je veux 11 rangées dans lesquelles les 10 premières lignes telle qu'elle est et la 11e rangée doit être la somme des rangées restantes p>
3 Réponses :
Vous pouvez sélectionner les 10 premières lignes et 1 SUM de lignes avec peut être CODE: P> Union code>
SELECT id, location, date, total_sales FROM table limit 10 // where etc..
UNION
SELECT 0 as id, '' as location, 0 as date, sum(total_sales) as total_sales FROM table;
dans SQL Server 2012, à l'aide de la fonction Row_Number () CODE> Fenêtre, vous pouvez y aller. Créer
Row_Number () CODE> Pour définir
ROWNUM CODE> pour chaque ligne et basé sur le résultat, en utilisant
Union tout code> Il retournera le résultat:
;WITH CTE AS (
SELECT id, location, [date], Total_Sales,
ROW_NUMBER() OVER (ORDER BY Id) AS RowNum
FROM TableName
)
SELECT CAST(id AS VARCHAR(30)) AS Id,
location,
CAST([date] AS VARCHAR(30)) AS [date],
CAST(Total_Sales AS VARCHAR(30)) AS Total_Sales
FROM CTE
WHERE RowNum BETWEEN 1 AND 10
UNION
SELECT '11-20 ids' AS id,
'11-20 AS locations' as location,
'11-20 dates' AS [date],
SUM(Total_Sales) AS Total_Sales
FROM CTE
WHERE RowNum BETWEEN 11 AND 20
J'utiliserais Row_Number () code> et agrégation conditionnelle. De cette façon, vous pouvez le faire avec un groupe
par code>:
Comment définissez-vous les «10 meilleures lignes»? Par date? Par montant?