Index: Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilDatabaseQueryBuilder.cs =================================================================== diff -u -r83eac2f8b272c0306bec2f92a028c23737505624 -r73a759207c68c2bcf74a8486a40f222dbe627a96 --- Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilDatabaseQueryBuilder.cs (.../SoilDatabaseQueryBuilder.cs) (revision 83eac2f8b272c0306bec2f92a028c23737505624) +++ Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilDatabaseQueryBuilder.cs (.../SoilDatabaseQueryBuilder.cs) (revision 73a759207c68c2bcf74a8486a40f222dbe627a96) @@ -28,6 +28,30 @@ /// internal static class SoilDatabaseQueryBuilder { + private static readonly string getMaterialPropertiesOfLayerQuery = + "SELECT " + + "mat.MA_ID, " + + $"mat.MA_Name AS {SoilProfileTableDefinitions.MaterialName}, " + + $"max(case when pn.PN_Name = 'Color' then pv.PV_Value end) {SoilProfileTableDefinitions.Color}, " + + $"max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Dist_Type end) {SoilProfileTableDefinitions.BelowPhreaticLevelDistribution}, " + + $"max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Shift end) {SoilProfileTableDefinitions.BelowPhreaticLevelShift}, " + + $"max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Mean end) {SoilProfileTableDefinitions.BelowPhreaticLevelMean}, " + + $"max(case when pn.PN_Name = 'BelowPhreaticLevelStochast' then s.ST_Deviation end) {SoilProfileTableDefinitions.BelowPhreaticLevelDeviation}, " + + $"max(case when pn.PN_Name = 'PermeabKxStochast' then s.ST_Dist_Type end) {SoilProfileTableDefinitions.PermeabilityDistribution}, " + + $"max(case when pn.PN_Name = 'PermeabKxStochast' then s.ST_Shift end) {SoilProfileTableDefinitions.PermeabilityShift}, " + + $"max(case when pn.PN_Name = 'PermeabKxStochast' then s.ST_Mean end) {SoilProfileTableDefinitions.PermeabilityMean}, " + + $"max(case when pn.PN_Name = 'PermeabKxStochast' then s.ST_Variation end) {SoilProfileTableDefinitions.PermeabilityCoefficientOfVariation}, " + + $"max(case when pn.PN_Name = 'DiameterD70Stochast' then s.ST_Dist_Type end) {SoilProfileTableDefinitions.DiameterD70Distribution}, " + + $"max(case when pn.PN_Name = 'DiameterD70Stochast' then s.ST_Shift end) {SoilProfileTableDefinitions.DiameterD70Shift}, " + + $"max(case when pn.PN_Name = 'DiameterD70Stochast' then s.ST_Mean end) {SoilProfileTableDefinitions.DiameterD70Mean}, " + + $"max(case when pn.PN_Name = 'DiameterD70Stochast' then s.ST_Variation end) {SoilProfileTableDefinitions.DiameterD70CoefficientOfVariation} " + + "FROM ParameterNames AS pn " + + "LEFT JOIN ParameterValues AS pv USING(PN_ID) " + + "LEFT JOIN Stochast AS s USING(PN_ID) " + + "JOIN Materials AS mat " + + "WHERE pv.MA_ID = mat.MA_ID OR s.MA_ID = mat.MA_ID " + + "GROUP BY mat.MA_ID "; + /// /// Returns the SQL query to execute to check if version of the DSoil-Model database is as expected. /// @@ -109,5 +133,105 @@ $"INNER JOIN {SegmentPointsTableDefinitions.TableName} SP USING({SegmentTableDefinitions.SegmentId}) " + $"ORDER BY SSM.{StochasticSoilModelTableDefinitions.StochasticSoilModelId};"; } + + /// + /// Returns the SQL query to execute to fetch 1D soil profile from the DSoil-Model database. + /// + /// The SQL query to execute. + public static string GetSoilProfile1DQuery() + { + string getNumberOfLayerProfile1DQuery = + $"SELECT SP1D_ID, COUNT(*) AS {SoilProfileTableDefinitions.LayerCount} " + + "FROM SoilLayer1D " + + "GROUP BY SP1D_ID"; + + string getLayerPropertiesOfLayer1DQuery = + $"SELECT SL1D_ID, PV_Value AS {SoilProfileTableDefinitions.IsAquifer} " + + "FROM ParameterNames " + + "JOIN LayerParameterValues USING(PN_ID) " + + $"WHERE PN_NAME = '{SoilProfileTableDefinitions.IsAquifer}'"; + + return + "SELECT " + + $"sp1d.SP1D_Name AS {SoilProfileTableDefinitions.ProfileName}, " + + $"layerCount.{SoilProfileTableDefinitions.LayerCount}, " + + $"sp1d.BottomLevel AS {SoilProfileTableDefinitions.Bottom}, " + + $"sl1d.TopLevel AS {SoilProfileTableDefinitions.Top}, " + + $"{SoilProfileTableDefinitions.MaterialName}, " + + $"{SoilProfileTableDefinitions.IsAquifer}, " + + $"{SoilProfileTableDefinitions.Color}, " + + $"{SoilProfileTableDefinitions.BelowPhreaticLevelDistribution}, " + + $"{SoilProfileTableDefinitions.BelowPhreaticLevelShift}, " + + $"{SoilProfileTableDefinitions.BelowPhreaticLevelMean}, " + + $"{SoilProfileTableDefinitions.BelowPhreaticLevelDeviation}, " + + $"{SoilProfileTableDefinitions.DiameterD70Distribution}, " + + $"{SoilProfileTableDefinitions.DiameterD70Shift}, " + + $"{SoilProfileTableDefinitions.DiameterD70Mean}, " + + $"{SoilProfileTableDefinitions.DiameterD70CoefficientOfVariation}, " + + $"{SoilProfileTableDefinitions.PermeabilityDistribution}, " + + $"{SoilProfileTableDefinitions.PermeabilityShift}, " + + $"{SoilProfileTableDefinitions.PermeabilityMean}, " + + $"{SoilProfileTableDefinitions.PermeabilityCoefficientOfVariation}, " + + $"sp1d.SP1D_ID AS {SoilProfileTableDefinitions.SoilProfileId} " + + "FROM Segment AS segment " + + "JOIN (SELECT SSM_ID, SP1D_ID, SP2D_ID FROM StochasticSoilProfile GROUP BY SSM_ID, SP1D_ID, SP2D_ID) ssp USING(SSM_ID) " + + "JOIN SoilProfile1D sp1d USING(SP1D_ID) " + + $"JOIN ({getNumberOfLayerProfile1DQuery}) {SoilProfileTableDefinitions.LayerCount} USING(SP1D_ID) " + + "JOIN SoilLayer1D sl1d USING(SP1D_ID) " + + $"LEFT JOIN ({getMaterialPropertiesOfLayerQuery}) materialProperties USING(MA_ID) " + + $"LEFT JOIN ({getLayerPropertiesOfLayer1DQuery}) layerProperties USING(SL1D_ID) " + + "GROUP BY sp1d.SP1D_ID, sl1d.SL1D_ID;"; + } + + /// + /// Returns the SQL query to execute to fetch 2D soil profile from the DSoil-Model database. + /// + /// The SQL query to execute. + public static string GetSoilProfile2DQuery() + { + string getNumberOfLayerProfile2DQuery = + $"SELECT SP2D_ID, COUNT(*) AS {SoilProfileTableDefinitions.LayerCount} " + + "FROM SoilLayer2D " + + "GROUP BY SP2D_ID"; + + string getLayerPropertiesOfLayer2DQuery = + $"SELECT SL2D_ID, PV_Value AS {SoilProfileTableDefinitions.IsAquifer} " + + "FROM ParameterNames " + + "JOIN LayerParameterValues USING(PN_ID) " + + $"WHERE PN_NAME = '{SoilProfileTableDefinitions.IsAquifer}'"; + + return + "SELECT " + + $"sp2d.SP2D_Name AS {SoilProfileTableDefinitions.ProfileName}, " + + $"layerCount.{SoilProfileTableDefinitions.LayerCount}, " + + $"sl2d.GeometrySurface AS {SoilProfileTableDefinitions.LayerGeometry}, " + + $"mpl.X AS {SoilProfileTableDefinitions.IntersectionX}, " + + $"{SoilProfileTableDefinitions.MaterialName}, " + + $"{SoilProfileTableDefinitions.IsAquifer}, " + + $"{SoilProfileTableDefinitions.Color}, " + + $"{SoilProfileTableDefinitions.BelowPhreaticLevelDistribution}, " + + $"{SoilProfileTableDefinitions.BelowPhreaticLevelShift}, " + + $"{SoilProfileTableDefinitions.BelowPhreaticLevelMean}, " + + $"{SoilProfileTableDefinitions.BelowPhreaticLevelDeviation}, " + + $"{SoilProfileTableDefinitions.DiameterD70Distribution}, " + + $"{SoilProfileTableDefinitions.DiameterD70Shift}, " + + $"{SoilProfileTableDefinitions.DiameterD70Mean}, " + + $"{SoilProfileTableDefinitions.DiameterD70CoefficientOfVariation}, " + + $"{SoilProfileTableDefinitions.PermeabilityDistribution}, " + + $"{SoilProfileTableDefinitions.PermeabilityShift}, " + + $"{SoilProfileTableDefinitions.PermeabilityMean}, " + + $"{SoilProfileTableDefinitions.PermeabilityCoefficientOfVariation}, " + + $"sp2d.SP2D_ID AS {SoilProfileTableDefinitions.SoilProfileId} " + + $"FROM {MechanismTableDefinitions.TableName} AS m " + + $"JOIN {SegmentTableDefinitions.TableName} AS segment USING({MechanismTableDefinitions.MechanismId}) " + + "JOIN (SELECT SSM_ID, SP1D_ID, SP2D_ID FROM StochasticSoilProfile GROUP BY SSM_ID, SP1D_ID, SP2D_ID) ssp USING(SSM_ID) " + + "JOIN SoilProfile2D sp2d USING(SP2D_ID) " + + $"JOIN ({getNumberOfLayerProfile2DQuery}) {SoilProfileTableDefinitions.LayerCount} USING(SP2D_ID) " + + "JOIN SoilLayer2D sl2d USING(SP2D_ID) " + + "LEFT JOIN MechanismPointLocation mpl USING(ME_ID, SP2D_ID) " + + $"LEFT JOIN ({getMaterialPropertiesOfLayerQuery}) materialProperties USING(MA_ID) " + + $"LEFT JOIN ({getLayerPropertiesOfLayer2DQuery}) layerProperties USING(SL2D_ID) " + + "GROUP BY sp2d.SP2D_ID, sl2d.SL2D_ID;"; + } } } \ No newline at end of file