我有个问题:
我想使用 UNION 将两个 SQL 查询连接到一个查询中以避免重复,但我需要知道数据是来自第一个选择查询还是来自第二个选择查询。
样本数据:
A TABLE B TABLE
-----------------------------------------------------------------------------
01 JOHN 01 JOHN
02 JUAN 02 PETER
03 MARTIN 03 MARTIN
Run Code Online (Sandbox Code Playgroud)
我有这样的事情:
Select A.code,A.name from A where some conditions
unión
Select B.code,B.name from B where diferent conditions
Run Code Online (Sandbox Code Playgroud)
结果表
01 JOHN
02 JUAN
02 PETER
03 MARTIN
Run Code Online (Sandbox Code Playgroud)
这工作正常,但现在如果我想知道数据是来自第一个查询还是来自第二个查询,我认为是这样的:
Select A.code,A.name, 'A' from A where some conditions
unión
Select B.code,B.name, 'B' from B where diferent conditions
Run Code Online (Sandbox Code Playgroud)
结果表
01 JOHN 'A'
01 JOHN 'B'
02 JUAN 'A'
02 PETER 'B' …Run Code Online (Sandbox Code Playgroud) 我需要的是当行的值与上一行相同时对行进行分组,“ B3”的值与“ B2”相同,如下所示:
我在epplus中使用c#,我看到如何使用outline选项来执行与此类似的操作,并且与我想要的功能相似,但是此选项有一些缺点,例如不能自动基于分组的缺点价值观,不能做各种团体。
EPPLUS是否可以做到这一点?如果不可能,如何将VBA代码添加到C#中?
StringBuilder vbaCode = new StringBuilder();
vbaCode.AppendLine("Sheets('Sheet1').Activate");
vbaCode.AppendLine("Range('A1: D11').Select");
vbaCode.AppendLine("Selection.Subtotal GroupBy:= 1, Function:= xlSum, TotalList:= Array(2, 3),Replace:= True, PageBreaks:= False, SummaryBelowData:= True");
pck.Save();
Run Code Online (Sandbox Code Playgroud)
但不起作用,我无法打开Excel文件。
编辑
现在有了摘要,我尝试使用group函数进行Interop,但是出于一个额外的原因,他将列而不是行分组,这是代码:
var ExApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks Wbs = ExApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook Wb = Wbs.Open(fi.FullName.ToString());
Microsoft.Office.Interop.Excel.Sheets wss = Wb.Worksheets;
Microsoft.Office.Interop.Excel.Worksheet Ws = (Microsoft.Office.Interop.Excel.Worksheet)wss.get_Item("Sheet1");
Ws.Range["A6:A10"].Group();
Ws.Outline.SummaryRow =Microsoft.Office.Interop.Excel.XlSummaryRow.xlSummaryAbove;
ExApp.Visible = true;
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用EPPLUS将列表导出到Excel中的Excel,当我执行程序时不给我错误,但是当我打开Excel时,我看到的不是正确的数据,他把projet的名称+对象的名称与对象一样多次具有列表:

对象的代码:
class Stock
{
public string Nif;
public string Proveedor;
public string Coodigo;
public string descripcion;
public string Catalogo;
public string Estadistico;
public decimal StockOn;
}
Run Code Online (Sandbox Code Playgroud)
当填充thes list(lstStock)时,我创建一个Excel并使用选项loadfromcollection:
System.IO.FileInfo f = new System.IO.FileInfo("D:\\stock_termos.xlsx");
if (f.Exists) f.Delete();
using (ExcelPackage ep = new ExcelPackage(f))
{
ExcelWorksheet hoja = ep.Workbook.Worksheets.Add("TOTAL OBSOLETOS");
hoja.Cells[1, 1].Value = "NIF"; ;
hoja.Cells[1, 2].Value = "Proveedor";
hoja.Cells[1, 3].Value = "Código";
hoja.Cells[1, 4].Value = "Descripción";
hoja.Cells[1, 5].Value = "Catálogo";
hoja.Cells[1, 6].Value = "Cod.Estadístico";
hoja.Cells[1, 7].Value = "Stock On";
hoja.Cells[2, …Run Code Online (Sandbox Code Playgroud) 我在C#中做一个程序,我试图在DBF文件中执行一个查询,我认为没问题,但DataReader的HasRows属性值为false.我认为问题在于日期.这是我的代码:
string Con = @"Provider=VFPOLEDB.1;Data Source=\\Server\ges_01";
OleDbConnection ConnectionHandler = new OleDbConnection(Con);
ConnectionHandler.Open();
string SQL = "SELECT codalb FROM BALBARA WHERE FECALB BETWEEN CTOD('2015/12/07') AND CTOD('2015/12/13') AND CODCLI LIKE '%9' ORDER BY CODALB"
OleDbCommand Query = new OleDbCommand(SQL, ConnectionHandler);
OleDbDataReader datareader = Query.ExecuteReader();
while(datareader.Read())
{}
Run Code Online (Sandbox Code Playgroud)
我知道其余的都可以,因为如果把string SQL="select codalb from balbara";工作正常.
任何人都可以说我做错了什么