Difficile instruction SQL SELECT - combiner deux lignes en deux colonnes

Mon problème:

J'ai une table avec un Channel <int> et un Value <float> colonne, avec un horodatage et un couple de d'autres colonnes avec des données supplémentaires. Channel est soit 1 ou 2, et il y est 1 ou 2 lignes qui ont tout sauf le canal et la valeur de la même.

Ce que je voudrais faire est de sélectionner ces données sous une nouvelle forme, où les deux canaux apparaissent comme des colonnes. J'ai essayé de faire quelque chose avec GROUP BY, mais je ne pouvais pas comprendre comment obtenir les valeurs dans les colonnes appropriées basées sur le canal sur la même ligne.

Exemple:

Pour ceux d'entre vous qui plutôt regarder les données que j'ai et les données que je veux et de le comprendre à partir de là, il est ici. Ce que j'ai:

 Channel    Value       Timestamp                OtherStuff
 1          0.2394      2010-07-09 13:00:00      'some other stuff'
 2          1.2348      2010-07-09 13:00:00      'some other stuff'
 1          24.2348     2010-07-09 12:58:00      'some other stuff'
 2          16.3728     2010-07-09 12:58:00      'some other stuff'
 1          12.284      2010-07-09 13:00:00      'unrelated things'
 2          9.6147      2010-07-09 13:00:00      'unrelated things'

Ce que je veux:

Value1     Value2      Timestamp                OtherStuff
0.2394     1.2348      2010-07-09 13:00:00      'some other stuff'
24.2348    16.3728     2010-07-09 12:58:00      'some other stuff'
12.284     9.6147      2010-07-09 13:00:00      'unrelated things'

Mise à jour en réponse à certaines questions qui surgissent dans les commentaires, et quelques questions/précisions:

  • Oui, c'est la combinaison de Timestamp et OtherStuff qui relie les deux lignes ensemble. (OtherStuff est en fait plus d'une colonne, mais je l'ai simplifié pour des raisons de concision.) Il ya aussi un couple de d'autres colonnes qui ne sont pas nécessairement égaux, mais elle doit être juste comme ils sont.

  • La table en question est déjà rejoint à partir de deux tables, où Value, Channel et Timestamp vient de l'un d'entre eux, et le reste (un total de plus de 7 colonnes, dont 4 sont toujours égaux pour "relier" les lignes, et les trois autres sont pour la plupart pas). Il y a eu un couple de suggestions en utilisant INNER JOIN - ci seront-elles encore si je suis déjà rejoindre des trucs ensemble (même si je n'ai pas de myTable à se joindre à lui-même)?

  • Il y a beaucoup de lignes à la même heure, donc j'ai besoin des informations des tables, je me joins à comprendre les lignes de lier ensemble.

  • J'ai beaucoup de données. Les données proviennent des appareils de mesure stationnés dans tout le pays, et la plupart (si pas tous) de télécharger des mesures (jusqu'à 4 canaux) toutes les 2 minutes. Aujourd'hui nous avons environ 1000 appareils en ligne, donc cela signifie une addidtion de moyenne d'environ 1000 lignes de chaque minute. J'ai besoin de tenir compte des valeurs qui sont au moins 3, de préférence 6, heures, ce qui signifie 180 000 à 360 000 lignes dans la table avec le canal, la valeur et l'horodatage.

  • ce qui relie les 2 lignes? l'horodatage et la otherstuff?
  • Juste posé une question qui est inverse 🙂 !
InformationsquelleAutor Tomas Aschan | 2010-07-09