У меня есть ситуация, когда у меня есть несколько сотен сложных таблиц Excel, каждая из которых имеет несколько сводных таблиц, выполняющих запросы к базе данных SQL.Мне нужно быть в состоянии преобразовать эти запросы SQL в вызовы функций против собственного хранилища данных.Это сложно на многих уровнях, но часть, о которой я сейчас спрашиваю, и, кажется, вероятно, была рассмотрена ранее в информатике, это как «разобрать» операторы sql в четко определенную структуру, с которой я могу работать программно.
Пример моей начальной точки:
SELECT vwFlowDataBest.MeasurementDate, vwFlowDataBest.LocationType, vwFlowDataBest.ScheduledVolume, tblPoints.Zone, tblPoints.Name AS SOME_ALIAS_FOR_NAME, vwFlowDataBest.PointID, tblCustomerType.Name, vwFlowDataBest.OperationallyAvailable, tblPoints.County, tblPoints.State, tblConnectingParty.Name
FROM Pipe2Pipe.dbo.tblConnectingParty tblConnectingParty, Pipe2Pipe.dbo.tblCustomerType tblCustomerType, Pipe2Pipe.dbo.tblPipelines tblPipelines, Pipe2Pipe.dbo.tblPoints tblPoints, Pipe2Pipe.dbo.vwFlowDataBest vwFlowDataBest
WHERE tblCustomerType.ID = tblPoints.CustomerTypeID AND tblPipelines.ID = vwFlowDataBest.PipelineID AND tblPoints.ID = vwFlowDataBest.PointID AND tblPoints.ConnectingPartyID = tblConnectingParty.ID AND ((tblPipelines.ID=16) AND (vwFlowDataBest.ScheduledVolume<>0) AND (tblPoints.Zone In ('mid 1','mid 2','mid 3','mid 4','mid 5','mid 6','mid 7')) AND (tblCustomerType.ID=16) AND (vwFlowDataBest.MeasurementDate>={ts '2010-05-15 00:00:00'}) AND (tblPipelines.ID<155))
Итак, для этого утверждения мне нужно программно обработать часть SELECT, часть FROM и часть WHERE, а также подчиненные в каждом.Осложнения этого - такие вещи, как псевдонимы, различие между объединением таблиц и фильтром простого старого значения в предложении where, группированием (скобками) в предложении where и другими проблемами.Разобраться со сложностями сводных таблиц Excel совершенно не входит в сферу этого вопроса, я могу это понять.
Пока я не против не поддержки определенных функций SQL, таких каккак "группировка по", "наличие" и т. д. для моей проблемы, они достаточно малы, чтобы при необходимости я мог обработать их вручную.Но если есть известный способ справиться с этим, я был бы очень счастлив.
Мне кажется, что я могу, вероятно, получить 70% пути (для моей проблемы), просто разделив выражение sqlна 3 части, а затем разбить каждую из них на логические подчиненные части, а затем разобраться с ними соответствующим образом.Но когда я пишу это, я уже вижу дыры в моем плане ... это похоже на остроту сложности и крайних случаев.
Я не могу себе представить, что я первый человек, который хочет сделать такоеВопрос в том, есть ли старые, проверенные подходы к решению этой проблемы, существующие библиотеки, инновационные подходы, которые я мог бы использовать, или какие-либо общие предложения для решения этой задачи?