我有以下数据:
Ord_Act_Deliv_DateTime TrmnlGrp_Key Ord_CustLoc_Key Ord_Driver_Key Ord_Inv_No Credits
2016-04-01 11:00:00 3 429 93 INV-00055295 True
2016-04-01 11:00:00 3 135 93 INV-00055295A False
2016-04-01 11:00:00 3 429 93 INV-00055295C False
我想要完成的事情如下
if credits = true
set @temp_invoice_no = Ord_inv_No + 'C'
SELECT * FROM Orders WHERE Ord_Inv_No NOT IN (original inv no with credit, inv no + 'C')
我可能在我选择的日期范围内有很多这样的记录,我需要确保原始和信用不会进入最终结果集。从我到目前为止的研究来看,看起来大多数建议使用CASE进行简单的比较(我认为这不适合这种情况)或IF指定单独的select语句,其中包含在语句中传递或声明的变量。也许我误解了CASE和IF的功能。请帮忙,我被困了。
我也可以在C#中探索这个,但我在那里仍然相当绿。我已经在DataTable中得到了结果,但是对表进行评估并不是我已经弄清楚除了将每行抛出到字符串之外的其他方法。
答案 0 :(得分:0)
因此,您有一组记录,其中要关注的列是Ord_Inv_No
和Credits
。
第一点,您正在设置一个临时变量,您似乎没有做任何事情。
至于选择查询
SELECT * FROM Orders WHERE Ord_Inv_No NOT IN (original inv no with credit, inv no + 'C')
我在original inv no with credit, inv no + 'C'
中看到的唯一区别是它的Credits
列值设置为True
(从第一位开始)。如果是这种情况,此查询应该适合您:
SELECT * FROM Orders WHERE Credits=true
答案 1 :(得分:0)
我最终在C#中执行了以下操作:
foreach(DataRow row in results.Rows)
{
credit = Convert.ToBoolean(row["Credits"].ToString());
if(credit)
{
if (String.IsNullOrWhiteSpace(selectString))
{
tempString = row["Ord_Inv_No"].ToString();
selectString = String.Format("'{0}', '{0}C'",tempString);
}
else
{
tempString = row["Ord_Inv_No"].ToString();
selectString += String.Format(", '{0}', '{0}C'", tempString);
}
}
}
// The following three lines are for troubleshooting, shows the items being selected out and the initial count.
// If DriverKey is 9 and dates are 5-2-16 - 5-8-16 String should show to INV numbers and count should be 19
if (!String.IsNullOrWhiteSpace(selectString))
MessageBox.Show(selectString);
MessageBox.Show(results.Rows.Count.ToString());
// only process if string is not empty, need code
if (!String.IsNullOrWhiteSpace(selectString))
{
try
{
var rows = results.Select("Ord_Inv_No IN (" + selectString + ")");
foreach (var row in rows)
row.Delete();
results.AcceptChanges();
// This is for troubleshooting, gets the final number of rows after edits
// If DriverKey is 9 and dates are 5-2-16 - 5-8-16 final count should be 17
MessageBox.Show(results.Rows.Count.ToString());
results.Columns.Remove("Credits");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}