我在计划和计划明细的基础上有很多行,我想找出与其他明细相同的行集,例如计划1在明细表中有3行数据,因此需要为另一个计划找出相同的行。我的这篇文章中有一些示例数据可能对理解我的问题更有用。以下是示例数据图像,该数据将按记录分组,但不在基于完整行集的单行基础上 PlanId,MinCount,MaxCount和CurrencyId
我曾尝试过一些冗长的过程,例如将所有数据追加到一行中,然后与其他数据进行比较,但这似乎很漫长的过程,并且要花很长时间才能存储100条记录,而实际数据库中大约有20000条记录所以不是一个好的解决方案,请建议我一些想法
答案 0 :(得分:0)
在SQL Server中很难产生您想要的结果。最简单的方法需要两个级别的字符串连接:
with t as (
select a.account_id,
stuff( (select '[' +
convert(varchar(255), staircount) + ',' +
convert(varchar(255), mincount) + ',' +
convert(varchar(255), maxcount) + ',' +
convert(varchar(255), currencyid) +
']'
from t
where t.account_id = a.account_id
order by staircount
for xml path ('')
), 1, 1, '') as details
from (select distinct account_id from t) a
)
select d.details,
stuff( (select cast(varchar(255), account_id) + ','
from t
where t.details = d.details
for xml path ('')
), 1, 1, '') as accounts
from (select distinct details from t) d;
这不完全是您的输出,但是对于您的问题来说可能就足够了。
答案 1 :(得分:0)
通过使用STRING_AGG,这在MS Sql Server 2017中将是微不足道的。
但是在2012年,其中一种方法是使用FOR XML技巧。
// Landing Page, ask for API Key
app.get("/", function(req,res){
res.render("landing.ejs");
});
app.get("/ui", function (req,res){
var apiKey = apiKey,
apiSecret = apiSecret;
var verb = 'GET',
path = '/api/v1/user/wallet?currency=XBt',
expires = new Date().getTime() + (60 * 1000);
var signature = crypto.createHmac('sha256', apiSecret).update(verb + path + expires).digest('hex');
var headers = {
'content-type' : 'application/json',
'Accept': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'api-expires': expires,
'api-key': apiKey,
'api-signature': signature
};
const requestOptions = {
headers: headers,
url:'https://testnet.bitmex.com'+path,
method: verb
};
request(requestOptions, function(error, response, body) {
if (error) { console.log(error);
} else{
console.log(body);
}
});
});
测试here