J'ai la colonne virtuelle suivante générée à partir d'un agrégat sur une partition triée,
MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Cependant, lorsque j'exécute cela, j'obtiens ce qui suit.
Msg 11305, Level 15, State 10, Line 12
The Parallel Data Warehouse (PDW) features are not enabled.
C'est là que cela devient intéressant, sans ordre de tri sur la partition, cela fonctionne:
MIN(picture_id) OVER ( PARTITION BY [360_set] )
Et, en outre, ROW_NUMBER()
une fonction de fenêtre (pas une fonction d'agrégation) fonctionne avec un ordre explicite sur la partition.
ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Comment se fait-il que l'énoncé souhaité ne fonctionne pas? Où est-ce documenté? Les informations de version ont été demandées, c'est ce que je trouve dans Aide → À propos.
Microsoft SQL Server Management Studio 10.0.5512.0
Microsoft Analysis Services Client Tools 10.0.5500.0
Microsoft Data Access Components (MDAC) 6.1.7601.17514
Microsoft MSXML 3.0 6.0
Microsoft Internet Explorer 9.10.9200.16635
Microsoft .NET Framework 2.0.50727.5472
Operating System 6.1.7601
Le résultat de SELECT @@VERSION
estMicrosoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64) Aug 22 2012 19:25:47 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)
la source
[360_set]
, ou cette partie n'est-elle pas pertinente? De plus, d'après votre commentaire, la formule que vous avez donnée ne fonctionne que comme la description du texte s'il n'y a pas de lacunes dans la séquence. Lequel veux-tu?MIN
fonctionnement, bien sûr, mais cela modifie les lignes du cadre sur lesquellesMIN
est effectué.RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. Ainsi, la fenêtre inclut uniquement des valeurs dont lespicture_id
valeurs sont inférieures ou égales à celles de la ligne actuelle.Réponses:
Il s'agit d'un bogue d'analyse qui n'existe que dans SQL Server 2008. Les versions non PDW de SQL Server avant 2012 ne prennent pas en charge la
ORDER BY
clause avec des fonctions d'agrégation commeMIN
:La prise en charge de la fonction de fenêtrage a été considérablement étendue en 2012, par rapport à l'implémentation de base disponible à partir de SQL Server 2005. Les extensions ont été rendues disponibles dans Parallel Data Warehouse avant d'être incorporées dans le produit box. Étant donné que les différentes éditions partagent une base de code commune, des messages d'erreur trompeurs comme celui-ci sont possibles.
Si vous êtes intéressé, la pile d'appels lorsque l'agrégat est vérifié par l'analyseur est illustrée ci-dessous. Étant donné que l'agrégat contient une
OVER
clause avecORDER BY
, une vérification de PDW est émise:Cette vérification échoue immédiatement avec une erreur d'analyse:
Heureusement, vous n'avez pas besoin d'un agrégat fenêtré qui prend en charge le
ORDER BY
cadrage pour résoudre votre problème de code.la source
Cela va être le résultat de la fusion des bases de code PDW, Azure et box. Nous allons commencer à voir des messages comme celui-ci ou que vous n'êtes pas sur une machine Azure lorsque vous essayez de faire des choses qui n'ont été publiées que dans Azure.
Quant à la question de Martin sur les extensions PDW, ce sont les fonctionnalités du langage T-SQL qui ne sont implémentées que dans le produit PDW (Parallel Data Warehouse).
la source
ORDER BY
agrégats fenêtrés ne peuvent pas être activés dans SQL Server 2008. La fonctionnalité n'a pas été «extraite», elle n'a été publiée pour les serveurs SQL non PDW qu'à partir de la version 2012.Répondre à cela comme un élément du message d'erreur. Comme l'a dit @MartinSmith ci-dessus,
Ceci est mentionné officiellement ici SQL Server 2008 R2 - Clause OVER (Transact-SQL)
Encore plus significatif est le verbiage dans SQL Server 2012 - Clause OVER (Transact-SQL)
Donc, il semble qu'il ne soit certainement pas disponible en 2008 - bien que ce message d'erreur soit une façon vraiment obscure de dire "non implémenté" , et en 2012, il semble que la position officielle de Microsoft soit que votre kilométrage puisse varier .
la source