我遇到了问题,我的公司有一个客户满意度计划,它从我们的数据库系统中的不同表中获取大量数据。
问题是我只想显示特定部门的客户满意度百分比,因此只显示此特定部门的员工。
表中的问题是我从中获取员工,如果他们已经切换了部门,那么同一员工会有重复,所以如果他们在1年前在1个部门工作,今天又搬到另一个部门,它会告诉我即使他们已经切换了部门,因为他们使用相同的ID
注册,我们的SQL程序中的逻辑代码如下:
"KS_DRIFT.V_AGENT_ALLOCATION age ON " + (queryParams.JoinOnFirstAgent ? "FØRSTE_AGENT" : "SIDSTE_AGENT") + " = age.AGENT_INITIALS AND TRUNC(TIDSPUNKT) BETWEEN ALLOCATION_START AND ALLOCATION_END " +
"WHERE " +
"TRUNC(TIDSPUNKT) BETWEEN " + OracleConversion.ToOracleDate(queryParams.Interval.Lower) + " AND " + OracleConversion.ToOracleDate(queryParams.Interval.Upper)
我不确定如何根据此sql查询确保它仅取出当前员工处于活动状态的部门?我希望任何人都可以帮助我更接近解决方案。
修改
COMPLETE QUERY
var sql = "SELECT " +
"SPØRGSMÅL_ID, " +
"KARAKTER, " +
"COUNT(*) AS COUNT " +
"FROM " +
"KS_DRIFT.KT_KARAKTER kara " +
"LEFT JOIN " +
"KS_DRIFT.KT_BESVARELSE besv ON kara.BESVARELSE_ID = besv.EKSTERN_ID AND kara.TYPE = besv.TYPE " +
"LEFT JOIN " +
"KS_DRIFT.V_AGENT_ALLOCATION age ON " + (queryParams.JoinOnFirstAgent ? "FØRSTE_AGENT" : "SIDSTE_AGENT") + " = age.AGENT_INITIALS AND TRUNC(TIDSPUNKT) BETWEEN ALLOCATION_START AND ALLOCATION_END " +
"WHERE " +
"TRUNC(TIDSPUNKT) BETWEEN " + OracleConversion.ToOracleDate(queryParams.Interval.Lower) + " AND " + OracleConversion.ToOracleDate(queryParams.Interval.Upper) + " AND " +
"SPØRGSMÅL_ID = " + queryParams.QuestionId +
(!queryParams.IncludeCDNs.IsNullOrEmpty() ? "AND CDN IN (" + queryParams.IncludeCDNs.ToDelimitedString(", ") + ") " : "") +
(!queryParams.ExcludeCDNs.IsNullOrEmpty() ? "AND CDN NOT IN (" + queryParams.ExcludeCDNs.ToDelimitedString(", ") + ") " : "") +
(!queryParams.AgentIds.IsNullOrEmpty() ? " AND AGENT_ID IN (" + queryParams.AgentIds.ToDelimitedString(", ") + ") " : "") +
(!queryParams.TeamIds.IsNullOrEmpty() ? " AND TEAM_ID IN (" + queryParams.TeamIds.ToDelimitedString(", ") + ") " : "") +
"GROUP BY " +
"SPØRGSMÅL_ID, " +
"KARAKTER";
使用Gerard建议的查询
时出现错误消息ORA-00932:inkonsistente datatyper:forventede DATE,fik NUMBER ved Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx,OpoSqlValCtx * pOpoSqlValCtx,Object src,String procedure,Boolean bCheck) ved Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,OracleConnection conn,String procedure,IntPtr opsErrCtx,OpoSqlValCtx * pOpoSqlValCtx,Object src,Boolean bCheck) ved Oracle.DataAccess.Client.OracleCommand.ExecuteReader(布尔重新查询,布尔fillRequest,CommandBehavior行为) ved Oracle.DataAccess.Client.OracleCommand.ExecuteReader()
ved NDDataProvider.Database.Oracle.Connection.DBConnection.ExecuteQuery(String query)i S:\ s0book \ ND Udviklings Dokumentation \ Git Repository dump - THOMAS HER \ NDSolution \ DOPe Data Provider \ Database \ Oracle \ Connection \ DBConnection。 cs:linje 456
OracleConversion.cs
public class OracleConversion {
public static string ToOracleValue(object value) {
if (value == null)
return "null";
if (value is string)
return OracleConversion.ToOracleString((String)value);
if (value is Enum)
return OracleConversion.ToOracleInteger((int)value);
int integerValue;
if (Int32.TryParse(value.ToString(), out integerValue))
return OracleConversion.ToOracleInteger(integerValue);
decimal decimalValue;
if (Decimal.TryParse(value.ToString(), out decimalValue))
return OracleConversion.ToOracleDecimal(decimalValue);
if (value is Boolean)
return OracleConversion.ToOracleBoolean((Boolean)value);
if (value is DateTime)
return OracleConversion.ToOracleDateTime((DateTime)value);
if (value is NDUtilities.Time)
return OracleConversion.ToOracleInteger(((NDUtilities.Time)value).SecondsOfDay);
if (value is SolutionsEntity)
return OracleConversion.ToOracleInteger(((SolutionsEntity)value).Id);
return OracleConversion.ToOracleString(value.ToString());
}
public static string ToOracleBoolean(Nullable<bool> booleanValue) {
string returnValue;
if (booleanValue == null)
returnValue = "null";
else
returnValue = (booleanValue.Value) ? "1" : "0";
return returnValue;
}
public static string ToOracleInteger(Nullable<int> integerValue) {
string returnValue;
if (integerValue == null)
returnValue = "null";
else
returnValue = integerValue.ToString();
return returnValue;
}
public static string ToOracleDecimal(Nullable<decimal> decimalValue) {
string returnValue;
if (decimalValue == null)
returnValue = "null";
else
returnValue = decimalValue.Value.ToString().Replace(",", ".");
return returnValue;
}
public static string ToOracleString(string stringValue) {
string returnValue;
if (stringValue == null)
returnValue = "null";
else {
returnValue = stringValue.Replace("'", "''");
returnValue = "'" + returnValue + "'";
}
return returnValue;
}
public static string ToOracleDate(DateTime? dateTimeValue) {
string returnValue;
if (dateTimeValue == null)
returnValue = "null";
else
returnValue = OracleConversion.ToOracleString(dateTimeValue.Value.ToString("yyyy-MM-dd"));
return returnValue;
}
public static string ToOracleDateTime(DateTime? dateTimeValue) {
string returnValue;
if (dateTimeValue == null)
returnValue = "null";
else
returnValue = "TO_DATE(" + OracleConversion.ToOracleString(dateTimeValue.Value.ToString("yyyy-MM-dd HH:mm:ss")) + ", " + OracleConversion.ToOracleString("yyyy-mm-dd hh24:mi:ss") + ")";
return returnValue;
}
}
}
答案 0 :(得分:1)
只需在sysdate和分配列上添加测试
var sql = "SELECT " +
"SPØRGSMÅL_ID, " +
"KARAKTER, " +
"COUNT(*) AS COUNT " +
"FROM " +
"KS_DRIFT.KT_KARAKTER kara " +
"LEFT JOIN " +
"KS_DRIFT.KT_BESVARELSE besv ON kara.BESVARELSE_ID = besv.EKSTERN_ID AND kara.TYPE = besv.TYPE " +
"LEFT JOIN " +
"KS_DRIFT.V_AGENT_ALLOCATION age ON " + (queryParams.JoinOnFirstAgent ? "FØRSTE_AGENT" : "SIDSTE_AGENT") + " = age.AGENT_INITIALS AND TIDSPUNKT >= ALLOCATION_START AND TIDSPUNKT < ALLOCATION_END + 1 " +
"and sysdate BETWEEN ALLOCATION_START AND ALLOCATION_END " +
"WHERE TIDSPUNKT >= to_date(" +
OracleConversion.ToOracleDate(queryParams.Interval.Lower) +
",'YYYY-MM-DD') AND TIDSPUNKT < to_date(" +
OracleConversion.ToOracleDate(queryParams.Interval.Upper) +
",'YYYY-MM-DD') + 1 AND " +
"SPØRGSMÅL_ID = " + queryParams.QuestionId +
(!queryParams.IncludeCDNs.IsNullOrEmpty() ? "AND CDN IN (" + queryParams.IncludeCDNs.ToDelimitedString(", ") + ") " : "") +
(!queryParams.ExcludeCDNs.IsNullOrEmpty() ? "AND CDN NOT IN (" + queryParams.ExcludeCDNs.ToDelimitedString(", ") + ") " : "") +
(!queryParams.AgentIds.IsNullOrEmpty() ? " AND AGENT_ID IN (" + queryParams.AgentIds.ToDelimitedString(", ") + ") " : "") +
(!queryParams.TeamIds.IsNullOrEmpty() ? " AND TEAM_ID IN (" + queryParams.TeamIds.ToDelimitedString(", ") + ") " : "") +
"GROUP BY " +
"SPØRGSMÅL_ID, " +
"KARAKTER";