IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Problème Code SQL Server


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut Problème Code SQL Server
    Bonjour à tous,

    j'ai besoin de votre aide. Je travaille actuellement sur IRIS un logiciel qui enregistre dans des BDD plusieurs info venant d'analyseur( température, date, num de serie,..). IRIS est connecté à SQL Server.
    Je dois entre autre afficher sur une feuille excel les résultats venant des différents analyseurs et cela de façon automatique c'est a dire que en changeant le numéro de série( sur une case excel que j'aurais a spécifier dans le programme),les résultats correspondant au num de serie doivent s'afficher sur excel.
    Le programme je le fais sur Visual Basic excel. J'ai réussi à faire la connexion entre excel et sql server avec un objet de connexion que j'ai déclaré dans mon programme( rs pour recordset). Le problème se situe au niveau du code SQL que je dois taper lors de l'ouverture des base de données au niveau du VBA.Donc voila mon problème:

    1-je veux afficher une valeur pour trois conditions, donc je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT Valeur  FROM dbo.Result WHERE identifier=' Temp Flash'
    SELECT Valeur FROM dbo.Result WHERE identifier=' Temp Fire'
    SELECT Valeur FROM dbo.Result WHERE identifier=' Temp Point'
    cela m'affiche correctement les valeurs dont j'ai besoin mais dans 3 résultats différents.Je voudrais en quelques sortes relier les 3 select pour afficher dans un meme resultat ces valeurs dans 3 colonnes différents sur SQL Server.J'ai essayer le AND mais sa ne marche pas.

    2-Contrairement a Access, SQL Server transforme les caractères sous forme de clé bizarre (genre de l'hexadecimal). Du coup quand je fais:

    select serialnumber from dbo.Instrument where identifier='analyseur1' au niveau de vba excel précédé par rs.Open"......" il y a une erreur de compilation car sur les BDD de SQL server sur la colonne serialnumber tout est marqué "NULL" à la place du vrai numéro de série et je ais pas trop quoi faire

    3-Ce problème la semble bête mais vu que le code SQL que je dois taper sur vba sera très long j'aimerais bien faire des retours à la ligne mais j'ai essayé un peu de voir sur le site et j'ai vu qu'il fallait tapé & _ mais ça me marque erreur

    Donc voila. Je sais que je vous en demande beaucoup, mais c'est très important. Je vous remercie d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    SELECT Valeur FROM dbo.Result WHERE identifier=' Temp Flash'
    SELECT Valeur FROM dbo.Result WHERE identifier=' Temp Fire'
    SELECT Valeur FROM dbo.Result WHERE identifier=' Temp Point'
    cela m'affiche correctement les valeurs dont j'ai besoin mais dans 3 résultats différents.Je voudrais en quelques sortes relier les 3 select pour afficher dans un meme resultat ces valeurs dans 3 colonnes différents sur SQL Server.J'ai essayer le AND mais sa ne marche pas.
    Ce n'est pas l'opérateur logique AND qu'il faut utiliser mais OR ou encore IN.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Valeur 
    FROM dbo.Result WHERE identifier IN ('Temp Flash', 'Temp Fire', 'Temp Point')
    2-Contrairement a access, SQL Server transforme les caractères sous forme de clé bizarre( genre de l'hexadecimal).Du coup quand je fais:
    select serialnumber from dbo.Instrument where identifier='analyseur1' au niveau de vba excel précédé par rs.Open"......" il y'a une erreur de compillation car sur les BDD de SQL server sur la colonne serialnumber tout est marqué "NULL" à la place du vrai num de série et je ais pas tro quoi faire
    Donnez nous la structure de votre table et votre code VBA.

    3-Ce problème la semble bete mais vu que le code SQL que je dois taper sur vba sera très long j'aimerais bien faire des retours à la ligne mais j'ai essayé un peu de voir sur le site et j'ai vu qu'il fallait tapé & _ mais sa me marque erreur
    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    sql = "SELECT Valeur FROM dbo.Result "
    sql = sql & "WHERE utilisateur = ' Temp Fire'"  
    ...
    ++

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    pour avoir 3 colonnes :
    select (select valeur from result where ...), (select ...), (select ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    Mon problème 3 est réglé grace à toi mikedavem.Je t'en remercie.£

    1)J'ai essayé vos 2 méthodes ainsi que celle de Pol63 mais sa ne marche pas. Lors de la compilation sur sql server sa marque

    Msg 512, Level 16, State 1, Line 4
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
    Voila le code que j'ai ecrit dont je veux que le résultat s'affiche dans un seul résultat comportant plusieurs colonnes lors de la compil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select user1 AS Echantillon, user6 AS Méthode,date_created, x_date from dbo.Sample where sample_id IN
    (select sample_id from dbo.Result where instrument_id IN(
    select instrument_id from dbo.Instrument where instrumentType_id='73354290-e09a-4c17-aa26-43a4b579e1db'))
     
    select xValue AS TempératureFlash FROM dbo.ResultData WHERE variable_id =
    (select variable_id  from dbo.xVariable WHERE identifier = 'FP56_FlashTemp')
     
    select xValue AS TempératureFlashCorrigée FROM dbo.ResultData WHERE variable_id =
    (select variable_id  from dbo.xVariable WHERE identifier = 'FP56_CorrFlashTemp')
     
    select xValue AS EFP1Flash FROM dbo.ResultData WHERE variable_id =
    (select variable_id  from dbo.xVariable WHERE identifier = 'FP56_EFP1Flash')
    Tel qu'il est là lors de l'execution j'ai 4 résultats et j'aimerais les reunir en un seul.

    2) Voila mon programme vba excel
    dans le microsoft objet excel, dans la feuille 1, j'ai tapé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$C$4" Then
        FP56_5G2
        End If
    ' dès que l'on change de n° de série , on appel le programme de gestion des résultats
    End Sub
    Dans le module, voici mon programme vba excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    'D'abord pour accéder à une base de donnée SQL Server, il faut se connecter à cette source de donnée'
    'Utiliser un recordset pour accéder aux données'
    'Le recordset est l'objet qui parcourt le résultat d'une requête SQL'
    'Ajouter les références requises pour pouvoir déclarer l'objet de connection: Microsft DAO 3.6 Object Library et Microsoft Data Object 2.8 Library'
     
    Sub FP56_5G2()
     
    Dim cN As ADODB.Connection 'Declarer l'objet de connexion'
    Dim rs As ADODB.Recordset 'Declarer le recordset'
    Dim Z As Integer
    Dim SerialNumber As Integer 'numéro de série appareil'
     
    Worksheets("FP56").Range("A9").CurrentRegion.Borders.LineStyle = xlNone 'efface bordures'
    Worksheets("FP56").Range("A10:N50").ClearContents 'efface données'
    Worksheets("FP56").Range("E10:E50").FormatConditions.Delete 'efface format conditionnel'
    Worksheets("FP56").Range("I10:I50").FormatConditions.Delete
    Worksheets("FP56").Range("I10:I50").Font.ColorIndex = xlColorIndexAutomatic
    Worksheets("FP56").Range("E10:E50").Font.ColorIndex = xlColorIndexAutomatic
    Worksheets("FP56").Range("A9").CurrentRegion.Font.ColorIndex = xlColorIndexAutomatic 'efface la couleur du texte'
     
        Set cN = New ADODB.Connection 'Instnacier l'objet de connexion'
        Set rs = New ADODB.Recordset 'Instancier l'objet de connection'
        dbPath = Path
    'Définir une connexion string(chaine de connection) et l'affecter à la connexion'
    'Cette chaine doit renseigner sur le provider( fournisseur de BDD ou SGBD), le nom de la BDD et les paramètres de Login et mot de passe(optionnels')
     
    SerialNumber = Worksheets("FP56").Range("C4").Value
    Application.ScreenUpdating = False
    Z = 10
     
     'connection à la base de données'
        cN.ConnectionString = "Provider=SQLOLEDB;Data Source=VERPACWS016\ENTERPRISE;Initial Catalog=enterprise; User ID=sa;Password=Alpha2000;"
        cN.Open 'Ouvrir la connexion en utilisant l'objet de connexion instancié et la connection string'
     
    'Selection des enregistrements en fonction du numéro de série de l'appareil et de l'échantillon'
    rs.Open "select user1 AS Echantillon, user6 AS Méthode,date_created, x_date from dbo.Sample where sample_id IN " _
          & "(select sample_id from dbo.Result where instrument_id IN(" _
          & "select instrument_id from dbo.Instrument where instrumentType_id='73354290-e09a-4c17-aa26-43a4b579e1db'))" _
          & "select xValue AS TempératureFlash FROM dbo.ResultData WHERE variable_id = " _
          & "(select variable_id  from dbo.xVariable WHERE identifier = 'FP56_FlashTemp') " _
          & "select xValue AS TempératureFlashCorrigée FROM dbo.ResultData WHERE variable_id =" _
          & "(select variable_id  from dbo.xVariable WHERE identifier = 'FP56_CorrFlashTemp') " _
          & "select xValue AS EFP1Flash FROM dbo.ResultData WHERE variable_id = " _
          & "(select variable_id  from dbo.xVariable WHERE identifier = 'FP56_EFP1Flash') order by x_date ASC", cN, adOpenKeyset, adLockOptimistic
        If Not rs.EOF Then
            While Not rs.EOF
                Worksheets("FP56").Cells(Z, 1).Value = rs.Fields("user1").Value
                Worksheets("FP56").Cells(Z, 2).Value = rs.Fields("xValue").Value
                Worksheets("FP56").Cells(Z, 3).Value = rs.Fields("date_created").Value
                Worksheets("FP56").Cells(Z, 4).Value = rs.Fields("user6").Value
                Worksheets("FP56").Cells(Z, 6).Value = rs.Fields("x_date").Value
                rs.MoveNext
                Z = Z + 1
            Wend
        End If
    rs.Close
    cN.Close
    Set rs = Nothing
    Set cN = Nothing
     
     
    End Sub
    Bien sur cela ne fonctionne pas parcequ'il y'a des select qui sont indépendant et que la table ou il y'a le numero de série marque 'NULL' pour toutes le valeurs.A l'origine c'est une base de donnée access qui a été importé sur SQL par le logiciel IRIS dont j'ai fait mention au début. Du coup les info dont j'ai besoin sont éparpillé un peu partout d'ou la necessité de faire des jointures pour afficher les résultats dont j'ai besoin. Voila le code de la table dbo.Instrument, la ou se trouve les num de série

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    USE [Enterprise]
    GO
    /****** Object:  Table [dbo].[Instrument]    Script Date: 04/30/2012 13:56:40 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[Instrument](
    	[instrument_id] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_Instrument_instrument_id]  DEFAULT (newid()),
    	[instrumenttype_id] [uniqueidentifier] NOT NULL,
    	[instrumentmodel_id] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Instrument_instrumentmodel_id]  DEFAULT ('{ED4C8260-DA1B-4C43-AB25-B69812B9CF4E}'),
    	[identifier] [nvarchar](50) NOT NULL,
    	[description] [nvarchar](80) NULL,
    	[location_id] [uniqueidentifier] NOT NULL,
    	[serial_number] [nvarchar](20) NULL,
    	[network_address] [nvarchar](200) NOT NULL,
    	[socket_number] [int] NOT NULL,
    	[hardware_port] [nvarchar](20) NULL,
    	[last_calibration] [datetime] NULL,
    	[next_calibration_planned] [datetime] NULL,
    	[next_calibration_required] [datetime] NULL,
    	[max_tests_allowed] [int] NULL,
    	[max_curves] [int] NULL,
    	[curve_saved_color] [nvarchar](20) NULL,
    	[curve_gradient_color] [nvarchar](20) NULL,
    	[panel_layout] [nvarchar](2048) NULL,
    	[queue_display_fields] [nvarchar](200) NULL,
    	[queue_filter] [nvarchar](200) NULL,
    	[parameter] [nvarchar](1024) NULL,
    	[product_no] [int] NULL,
    	[in_use_host] [nvarchar](50) NULL,
    	[in_use_user_id] [uniqueidentifier] NULL,
    	[heartbeat] [datetime] NULL,
    	[x_date] [datetime] NOT NULL,
    	[x_user_id] [uniqueidentifier] NOT NULL,
    	[x_deleted] [bit] NOT NULL,
     CONSTRAINT [PK_Instrument] PRIMARY KEY CLUSTERED 
    (
    	[instrument_id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Il vous faut faire des jointures ! C'est l'opération la plus naturelle pour un SGBDR
    Je vous conseille de lire le cours de SQLPro sur le sujet.

    Voici ce que cela donne pour la requête de votre premier post :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT		S.user1 AS Echantillon
    		, S.user6 AS Méthode
    		, S.date_created
    		, S.x_date
    FROM		dbo.Sample AS S
    INNER JOIN	dbo.Result AS R
    			ON S.sample_id = R.sample_id
    INNER JOIN	dbo.Instrument AS I
    			ON S.instrument_id = R.instrument_id
    WHERE		I.instrumentType_id = CAST('73354290-e09a-4c17-aa26-43a4b579e1db' AS uniqueidentifier)
    Et pour la xValue dans votre dernière réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT		TFC.xValue
    FROM		dbo.TempératureFlashCorrigée AS TFC
    INNER JOIN	dbo.xVariable AS V
    			ON TFC.variable_id = V.variable_id
    WHERE		V.identifier IN ('FP56_FlashTemp', 'FP56_CorrFlashTemp', 'FP56_EFP1Flash')
    Notez que vous pouvez dans les deux cas spécifier des colonnes de toutes les tables qui participent à la requête dans le SELECT

    @++

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    Merci de ta réponse elsuket.Donc ton premier code sa marche sans problème et le 2ème avec xValue aussi mais mon problème c'est qu'au niveau du code avec xValue les valuers s'affichent en tenant compte des 3 identfiers alors que je veux afficher dans chaque colonnes les valeurs correspondant à chaque identifier.C'est pourquoi à la base je suis parti sur plusieurs select et puis je voulais les relier entre eux pour que dans un meme résultat j'ai: user1, user6, date_created,x_date,xValue(pour 1er identifier), xValue(pour 2ème identfier) et xValue(3ème identfier) dans des colonnes séparées.C'est sa mon problème je n'y arrive pas.
    Par exemple j'ai les 2 requetes que tu a écrit elsuket et je veux les relier entre elle pour m'afficher un seul resultat( faire un seul select en gros)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT		S.user1 AS Echantillon
    		, S.user6 AS Méthode
    		, S.date_created
    		, S.x_date
    FROM		dbo.Sample AS S
    INNER JOIN	dbo.Result AS R
    			ON S.sample_id = R.sample_id
    INNER JOIN	dbo.Instrument AS I
    			ON S.instrument_id = R.instrument_id
    WHERE		I.instrumentType_id = CAST('73354290-e09a-4c17-aa26-43a4b579e1db' AS uniqueidentifier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT		RD.xValue
    FROM		dbo.ResultData AS RD
    INNER JOIN	dbo.xVariable AS V
    			ON RD.variable_id = V.variable_id
    WHERE		V.identifier IN ('FP56_FlashTemp', 'FP56_CorrFlashTemp', 'FP56_EFP1Flash')
    J'ai essayé de faire sa mais sa ne marche pas, il y'a une message erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT S.user1 AS Echantillon
    , S.user6 AS Méthode
    , S.date_created
    , S.x_date
    , RD.xValue
    FROM dbo.Sample AS S
    , dbo.ResultData AS RD
    INNER JOIN dbo.Result AS R
    ON S.sample_id = R.sample_id
    INNER JOIN dbo.Instrument AS I
    ON I.instrument_id = R.instrument_id
    INNER JOIN dbo.xVariable AS V
    ON RD.variable_id = V.variable_id
    WHERE I.instrumentType_id = CAST('73354290-e09a-4c17-aa26-43a4b579e1db' AS uniqueidentifier)
    AND V.identifier IN ('FP56_FlashTemp', 'FP56_CorrFlashTemp', 'FP56_EFP1Flash')
    Merci d'avance pour vos réponses

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    alors que je veux afficher dans chaque colonnes les valeurs correspondant à chaque identifier
    Cela sent le CROSS APPLY (qui nécessite SQL Server 2008) / la sous-requête corrélée

    J'ai essayé de faire sa mais sa ne marche pas, il y'a une message erreur
    Quand il y a un message d'erreur, par pitié donnez-le !
    Typiquement c'est parce que vous n'avez pas de prédicat de jointure pour dbo.ResultData ... mais peut-être que vous avez besoin d'un CROSS JOIN ...

    Dites-nous ce que vous obtenez actuellement pour les deux requêtes, et ce que vous souhaiteriez obtenir

    @++

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    Pour ce code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT S.user1 AS Echantillon
    , S.user6 AS Méthode
    , S.date_created
    , S.x_date
    , RD.xValue
    FROM dbo.Sample AS S
    , dbo.ResultData AS RD
    INNER JOIN dbo.Result AS R
    ON S.sample_id = R.sample_id
    INNER JOIN dbo.Instrument AS I
    ON I.instrument_id = R.instrument_id
    INNER JOIN dbo.xVariable AS V
    ON RD.variable_id = V.variable_id
    WHERE I.instrumentType_id = CAST('73354290-e09a-4c17-aa26-43a4b579e1db' AS uniqueidentifier)
    AND V.identifier IN ('FP56_FlashTemp', 'FP56_CorrFlashTemp', 'FP56_EFP1Flash')
    Voila le message d'erreur que j'obtiens:
    Msg 4104, Level 16, State 1, Line 1
    The multi-part identifier "S.sample_id" could not be bound.
    Donc comme je l'ai dis précédemment je veux tout afficher dans un seul résultat avec 3 xValue correspondant a chaque identifier.J'ai beau tourner la question dans tous les sens je ne trouve pas de solution.
    elsuket tu m'a parlé de CROSS JOIN et CROSS APPLY.Comment je suis cnsé l'utiliser dans ce code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    SELECT		S.user1 AS Echantillon
    		  , S.user6 AS Méthode
    		  , S.date_created
    		  , S.x_date
    FROM		dbo.Sample AS S
    INNER JOIN	dbo.Result AS R
    			ON S.sample_id = R.sample_id
    INNER JOIN	dbo.Instrument AS I
    			ON I.instrument_id = R.instrument_id
    WHERE		I.instrumentType_id = CAST('73354290-e09a-4c17-aa26-43a4b579e1db' AS uniqueidentifier)
     
    SELECT		RD.xValue
    FROM		dbo.ResultData AS RD 
    INNER JOIN	dbo.xVariable AS V
    			ON RD.variable_id = V.variable_id
    WHERE		V.identifier IN ('FP56_FlashTemp')
     
    SELECT		RD.xValue
    FROM		dbo.ResultData AS RD 
    INNER JOIN	dbo.xVariable AS V
    			ON RD.variable_id = V.variable_id
    WHERE		V.identifier IN ( 'FP56_CorrFlashTemp')
     
    SELECT		RD.xValue
    FROM		dbo.ResultData AS RD 
    INNER JOIN	dbo.xVariable AS V
    			ON RD.variable_id = V.variable_id
    WHERE		V.identifier IN ('FP56_EFP1Flash')
    J'ai 4 résultats: le 1er avec user1,user6,x_date, date_created
    le 2ème résultat avec xValue correspondant à l'identfier
    le 3ème résultat avec xValue correspondant à l'identfier
    le 4ème résultat avec xValue correspondant à l'identfier sachant que dans chaque cas l'identifier est différent et xValue aussi(chaque résultat sont bien cohérent entre eux, ils ont chacun 205 lignes)

  9. #9
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    En supposant qu'il n'y aucune corrélation entre les tables qui vous permettent de retrouver le xValue et les tables qui participent à la première requête de votre second extrait de code de votre dernier post, on peut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SELECT		S.user1 AS Echantillon
    		, S.user6 AS Méthode
    		, S.date_created
    		, S.x_date
    		, FT.xValue AS FP56_FlashTemp
    		, CFT.xValue AS FP56_CorrFlashTemp
    		, EF.xValue AS FP56_EFP1Flash
    FROM		dbo.Sample AS S
    INNER JOIN	dbo.Result AS R
    			ON S.sample_id = R.sample_id
    INNER JOIN	dbo.Instrument AS I
    			ON I.instrument_id = R.instrument_id
    CROSS APPLY	(
    			SELECT		RD.xValue
    			FROM		dbo.ResultData AS RD 
    			INNER JOIN	dbo.xVariable AS V
    						ON RD.variable_id = V.variable_id
    			WHERE		V.identifier IN ('FP56_FlashTemp')
    		) AS FT
    CROSS APPLY	(
    			SELECT		RD.xValue
    			FROM		dbo.ResultData AS RD 
    			INNER JOIN	dbo.xVariable AS V
    						ON RD.variable_id = V.variable_id
    			WHERE		V.identifier IN ('FP56_CorrFlashTemp')
    		) AS CFT
    CROSS APPLY	(
    			SELECT		RD.xValue
    			FROM		dbo.ResultData AS RD 
    			INNER JOIN	dbo.xVariable AS V
    						ON RD.variable_id = V.variable_id
    			WHERE		V.identifier IN ('FP56_EFP1Flash')
    		) AS EF
    WHERE		I.instrumentType_id = CAST('73354290-e09a-4c17-aa26-43a4b579e1db' AS uniqueidentifier)
    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    SELECT		S.user1 AS Echantillon
    		, S.user6 AS Méthode
    		, S.date_created
    		, S.x_date
    		, (
    			SELECT		RD.xValue
    			FROM		dbo.ResultData AS RD 
    			INNER JOIN	dbo.xVariable AS V
    						ON RD.variable_id = V.variable_id
    			WHERE		V.identifier IN ('FP56_FlashTemp')		
    		) AS FP56_FlashTemp
    		, (
    			SELECT		RD.xValue
    			FROM		dbo.ResultData AS RD 
    			INNER JOIN	dbo.xVariable AS V
    						ON RD.variable_id = V.variable_id
    			WHERE		V.identifier IN ('FP56_CorrFlashTemp')
    		) AS FP56_CorrFlashTemp
    		, (
    			SELECT		RD.xValue
    			FROM		dbo.ResultData AS RD 
    			INNER JOIN	dbo.xVariable AS V
    						ON RD.variable_id = V.variable_id
    			WHERE		V.identifier IN ('FP56_EFP1Flash')
    		) AS FP56_EFP1Flash
    FROM		dbo.Sample AS S
    INNER JOIN	dbo.Result AS R
    			ON S.sample_id = R.sample_id
    INNER JOIN	dbo.Instrument AS I
    			ON I.instrument_id = R.instrument_id
    Cela dit c'est dommage parce que vous êtes obligé de lire trois fois les deux même tables ...

    @++

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    Merci beaucoup elsuket, c'est bien ce que je voulais

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Trigger SQL Server
    Par RodEpsi dans le forum Développement
    Réponses: 6
    Dernier message: 25/05/2006, 15h03
  2. Problème installation SQL server express
    Par Guennec.Yannick dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 22/03/2006, 19h26
  3. Problème Curseur SQL SERVER
    Par Yanmeunier dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/12/2005, 19h19
  4. Problème installation SQL Server 2000 (programme antérieur)
    Par 404Found dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/04/2005, 10h24
  5. Problème réplication SQL Server et SQL Server CE (RDA)
    Par didix11 dans le forum Réplications
    Réponses: 2
    Dernier message: 15/04/2004, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo