Использование Python для запроса из двух таблиц в SQL Server - PullRequest
0 голосов
/ 21 июня 2019

В настоящее время используется следующий код для получения данных из одной таблицы с заданными условиями WHERE & AND:

import pyodbc 
import pandas as pd
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=XYZ\DA202P;'
                      'Database=Reporting;'
                      'Trusted_Connection=yes;')
cursor = conn.cursor()
query = pd.read_sql("""
               SELECT PID,NewValue,OriginalValue FROM Inc.ProblemAu
               where (ModifiedDate >= '2019-06-01 00:00:00.000' and ModifiedDate <= '2019-06-21 23:59:59.99')
               AND (NewValue='ntfy')
                """,conn)
query.to_excel('c:/temp/pydbc.xlsx')

Существует еще одна таблица Inc. Проблема с столбцами PID, X, y, zчто мне нужно получить, если PID получен из приведенного выше кода, работающего на Inc.ProblemAu.Результаты из приведенного выше кода могут содержать дубликаты PID, но уникальные значения в других столбцах.

Как получить данные (столбцы x, y, z) из второй таблицы Inc.Проблема на основе всех сгенерированных уникальных значений PIDсверху код?

1 Ответ

0 голосов
/ 21 июня 2019

Просто используйте предложения IN, EXISTS или JOIN:

IN

SELECT PID, x, y, z 
FROM Inc.Problem
WHERE PID IN
  (SELECT PID
   FROM Inc.ProblemAu
   WHERE (ModifiedDate >= '2019-06-01 00:00:00.000' 
     AND  ModifiedDate <= '2019-06-21 23:59:59.99')
     AND (NewValue='ntfy')
  )

EXISTS

SELECT PID, x, y, z 
FROM Inc.Problem main
WHERE EXISTS
  (SELECT 1
   FROM Inc.ProblemAu sub
   WHERE (sub.ModifiedDate >= '2019-06-01 00:00:00.000' 
     AND  sub.ModifiedDate <= '2019-06-21 23:59:59.99')
     AND (sub.NewValue='ntfy')
     AND main.PID = sub.PID
  )

JOIN

SELECT main.PID, main.x, main.y, main.z 
FROM Inc.Problem main
INNER JOIN
  (SELECT DISTINCT PID
   FROM Inc.ProblemAu sub
   WHERE (ModifiedDate >= '2019-06-01 00:00:00.000' 
     AND  ModifiedDate <= '2019-06-21 23:59:59.99')
     AND (NewValue='ntfy')
  ) sub
ON main.PID = sub.PID
...