我需要结合多个表的结果集。 我有一个带有from子句的查询,使用在参数中选择的每个国家/地区的表。
例如:
DataTable dt = auc.GetTradesByDate().Tables[0];
/**************************************************************/
StringBuilder sb = new StringBuilder();
sb.Append("date, symbol, symbolName, buyerId,buyerName\n");
foreach (DataRow dr in dt.Rows)
{
sb.Append(dr["date"]);
sb.Append("," + dr["symbol"]);
sb.Append("," + dr["symbolName"]);
sb.Append("," + dr["buyerId"]);
sb.Append("," + dr["buyerName"]);
sb.Append("\n");
}
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "text/csv";
Response.Charset = "";
Response.ContentEncoding = Encoding.UTF8;
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment;filename=trades_{0:yyyy-MM-dd}.csv", DateTime.Now));
byte[] BOM = new byte[] { 0xef, 0xbb, 0xbf };
Response.BinaryWrite(BOM);
Response.BinaryWrite(Encoding.UTF8.GetBytes(sb.ToString()));
Response.Flush();
Response.End();
现在在from子句中,表名是这样的,它必须分别为每个国家运行:
@prmCountry='AU,UK,US'
如何做到这一点?
答案 0 :(得分:1)
由于您的问题不是很清楚,但您正在查看一些动态SQL
查询:
DECLARE @prmCountry VARCHAR(MAX)= 'AU,UK,US';
DECLARE @SQL NVARCHAR(MAX)= N'';
DECLARE @Query NVARCHAR(MAX);
SELECT @SQL+=N' left join table_'+CC.Country+' on table_'+CC.Country+'.<column> = t1.<column>'
FROM
(
SELECT split.a.value('.', 'NVARCHAR(MAX)') [Country]
FROM
(
SELECT CAST('<A>'+REPLACE(@prmCountry, ',', '</A><A>')+'</A>' AS XML) AS Country
) C
CROSS APPLY Country.nodes('/A') AS split(a)
) CC;
SET @Query = 'SELECT * FROM tbl_abc t1'+@SQL+';';
PRINT @Query;
--EXECUTE sp_executesql @query
SQL
查询产生:
SELECT * FROM tbl_abc t1
left join table_AU on table_AU.<column> = t1.<column>
left join table_UK on table_UK.<column> = t1.<column>
left join table_US on table_US.<column> = t1.<column>;
@prmCountry
值拆分为行格式。@prmCountry
值答案 1 :(得分:0)
像这样使用UNION ALL:
SELECT
tbl_abc t1
left outer join tbl_country_('AU') t2
on.....
UNION ALL
SELECT
tbl_abc t1
left outer join tbl_country_('US') t2
on.....
...and so on